https://school.programmers.co.kr/learn/courses/30/lessons/43236
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ 4.
์์์๊ฐ ์ฝ 50๋ถ
์ด์งํ์์ ํ์ฉํ๋ ๋ฌธ์
์ด๋ค ๊ฐ์ ์ด๋ถํ์์ผ๋ก ์ฐพ์ ๊ฑด์ง ๊ฒฐ์ ํ๋๊ฒ ๊ฐ์ฅ ์ค์ํ๋ค!!!
๋ชฉํ๊ฐ๋ง ์ฐพ์ผ๋ฉด ์ด์ ๋ก์ง์ ์ด๋ ต์ง ์์๋ฏ ใ .ใ
์ด ์ง๊ฒ๋ค๋ฆฌ ๋ฌธ์ ์์๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์์ผ ํ๋ฏ๋ก (๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ)
1. left ์์์ ์ 0, right ๋์ ์ distance๋ก ๋๊ณ
2. mid ๊ฐ์ ์ ๋ต์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด์
3. ์ด ๋ ์ ๊ฑฐํด์ผ ํ๋ ๋์ ์๋ฅผ n๊ณผ ๋น๊ตํ๋ค.
4. ๊ฐ๋ฅํ ๊ฑฐ๋ฆฌ ๊ฐ ์ค ์ต๋๊ฐ์ ์ฐพ์์ผ ํ๋ฏ๋ก, ๋ฐ์๋ฅผ n๊ฐ ์ดํ๋ก ์ ๊ฑฐํ๋ฉด ๋ ๋์ mid ๊ฐ์ ์ ์ฅํ๋ค.
5. ์ ๊ฑฐํด์ผ ํ๋ ๋์ด n๋ณด๋ค ๋ ๋ง๋ค๋ฉด, mid๊ฐ ๋๋ฌด ํฐ ์ํฉ์ด๋ฏ๋ก mid๋ฅผ ์ค์ฌ์ผ ํจ.
6. ์ ๊ฑฐํ ๋์ด n๋ณด๋ค ์ ๋ค๋ฉด, mid๊ฐ ์์์ ๋๋ํ ์ํฉ์ด๋ฏ๋ก ๋๋ ค์ผ ํจ
โผ๏ธ 4๋ฒ ๋ถ์ฐ์ค๋ช
if (removeCnt == n)์ด ์๋๋ผ if (removeCnt <= n)์ผ ๋, ๋ต์ ๊ฐฑ์ ํด์ผ ํ๋ ์ด์ !!!
๋ฐ์๋ฅผ ๋ฑ n๊ฐ ์ ๊ฑฐํ ์ ์์ ๋๋ง ์ ๋ต ํ๋ณด๋ก ์ผ๋๋ค๋ฉด,
๋ ํฐ mid ๊ฐ์ผ๋ก n๊ฐ ์ดํ๋ฅผ ์ ๊ฑฐํ๋๊ฒ ๊ฐ๋ฅํ ์ํฉ์ ๋์น๊ฒ ๋จ (์ฐ๋ฆฌ์ ๋ชฉํ๋ mid์ ์ต๋๊ฐ์ด๋ฏ๋ก)
๋์ ํ์ด
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(int distance, vector<int> rocks, int n) {
int answer = 0;
sort(rocks.begin(), rocks.end());
// ์ต์ ๊ฑฐ๋ฆฌ ์ด๋ถํ์, ๊ฑฐ๋ฆฌ๊ฐ mid๋ณด๋ค ๋ ์์ผ๋ฉด ๋ฐ์๋ฅผ ์ ๊ฑฐํด์ผํจ
// ์ ๊ฑฐํด์ผ ํ๋ ๋ฐ์์ ์๋ฅผ n๊ณผ ๋น๊ตํ๊ธฐ
int left = 0;
int right = distance;
int mid = (left+right)/2; // mid๋ก ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค ์ต๋๊ฐ ์ฐพ๊ธฐ
rocks.push_back(distance); // ๋์ฐฉ ์ง์ ๋ ํฌํจ
while(left<=right){
int removeCnt = 0;
// ์ ๊ฑฐํ ๋ฐ์ ์ ์นด์ดํธ
int prev = 0; // ์ด์ ์์น๋ฅผ ๊ธฐ์ต
for(int i=0; i<rocks.size(); ++i){
if(rocks[i]-prev < mid){ // ์ ๊ฑฐํ๋ฉด ์ด์ ์์น๋ ๊ทธ๋๋ก.
removeCnt++;
}
else prev = rocks[i]; // ์ ๊ฑฐํ์ง ์์ผ๋ฉด, ์ด์ ์์น๋ฅผ ํ์ฌ์์น๋ก ๊ฐฑ์
}
if(removeCnt<=n) {
if(answer<mid) answer = mid;
}
// ์ ๊ฑฐํ ์๊ฐ ์ ์ผ๋ฉด, ์ต์๊ฐ์ ๋๋ฆฌ๊ธฐ
if(removeCnt <= n) left = mid+1;
else right = mid-1;
mid = (left+right)/2;
}
return answer;
}
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Javascript/PGS] Lv.2 : n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ (0) | 2025.05.08 |
---|---|
[Javascript/PGS] Lv.3 : ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (BFS) (1) | 2025.05.07 |
[C++/PGS] Lv.3 : ์์ ๋ณต์ํ๊ธฐ (PCCP ๊ธฐ์ถ๋ฌธ์ 4๋ฒ) - ๋ณด๋ฅ๐ฅต (0) | 2025.05.02 |
[C++/PGS] Lv.1 : ๋์์ ์ฌ์๊ธฐ (PCCP ๊ธฐ์ถ๋ฌธ์ 1๋ฒ) (0) | 2025.05.02 |
[C++/PGS] [PCCP ๊ธฐ์ถ๋ฌธ์ ] 4๋ฒ - ์๋ ์์ง์ด๊ธฐ (1) | 2025.05.02 |