https://programmers.co.kr/learn/courses/30/lessons/64062
๋ฌธ์
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ ์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์ ๋๋ค.]
์นด์นด์ค ์ด๋ฑํ๊ต์ "๋๋์ฆ ์น๊ตฌ๋ค"์ด "๋ผ์ด์ธ" ์ ์๋๊ณผ ํจ๊ป ๊ฐ์ ์ํ์ ๊ฐ๋ ์ค์ ์ง๊ฒ๋ค๋ฆฌ๊ฐ ์๋ ๊ฐ์ธ์ ๋ง๋์ ๊ฑด๋ํธ์ผ๋ก ๊ฑด๋๋ ค๊ณ ํฉ๋๋ค. "๋ผ์ด์ธ" ์ ์๋์ "๋๋์ฆ ์น๊ตฌ๋ค"์ด ๋ฌด์ฌํ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ท์น์ ๋ง๋ค์์ต๋๋ค.
- ์ง๊ฒ๋ค๋ฆฌ๋ ์ผ๋ ฌ๋ก ๋์ฌ ์๊ณ ๊ฐ ์ง๊ฒ๋ค๋ฆฌ์ ๋๋ค๋์๋ ๋ชจ๋ ์ซ์๊ฐ ์ ํ ์์ผ๋ฉฐ ๋๋ค๋์ ์ซ์๋ ํ ๋ฒ ๋ฐ์ ๋๋ง๋ค 1์ฉ ์ค์ด๋ญ๋๋ค.
- ๋๋ค๋์ ์ซ์๊ฐ 0์ด ๋๋ฉด ๋ ์ด์ ๋ฐ์ ์ ์์ผ๋ฉฐ ์ด๋๋ ๊ทธ ๋ค์ ๋๋ค๋๋ก ํ๋ฒ์ ์ฌ๋ฌ ์นธ์ ๊ฑด๋ ๋ธ ์ ์์ต๋๋ค.
- ๋จ, ๋ค์์ผ๋ก ๋ฐ์ ์ ์๋ ๋๋ค๋์ด ์ฌ๋ฌ ๊ฐ์ธ ๊ฒฝ์ฐ ๋ฌด์กฐ๊ฑด ๊ฐ์ฅ ๊ฐ๊น์ด ๋๋ค๋๋ก๋ง ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
"๋๋์ฆ ์น๊ตฌ๋ค"์ ๊ฐ์ธ์ ์ผ์ชฝ์ ์์ผ๋ฉฐ, ๊ฐ์ธ์ ์ค๋ฅธ์ชฝ ๊ฑด๋ํธ์ ๋์ฐฉํด์ผ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ๊ฒ์ผ๋ก ์ธ์ ํฉ๋๋ค.
"๋๋์ฆ ์น๊ตฌ๋ค"์ ํ ๋ฒ์ ํ ๋ช
์ฉ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ผ ํ๋ฉฐ, ํ ์น๊ตฌ๊ฐ ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๋ชจ๋ ๊ฑด๋ ํ์ ๊ทธ ๋ค์ ์น๊ตฌ๊ฐ ๊ฑด๋๊ธฐ ์์ํฉ๋๋ค.
๋๋ค๋์ ์ ํ ์ซ์๊ฐ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด stones์ ํ ๋ฒ์ ๊ฑด๋๋ธ ์ ์๋ ๋๋ค๋์ ์ต๋ ์นธ์ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต๋ ๋ช ๋ช ๊น์ง ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- ์ง๊ฒ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ผ ํ๋ ๋๋์ฆ ์น๊ตฌ๋ค์ ์๋ ๋ฌด์ ํ ์ด๋ผ๊ณ ๊ฐ์ฃผํฉ๋๋ค.
- stones ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 200,000 ์ดํ์ ๋๋ค.
- stones ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์ 200,000,000 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- k๋ 1 ์ด์ stones์ ๊ธธ์ด ์ดํ์ธ ์์ฐ์์ ๋๋ค.
ํ์ด
ํจ์จ์ฑ ์ฒดํฌ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ถํ์
์ผ๋ก ํด๊ฒฐ โผ๏ธ
๏นกmin : ๊ฑด๋๋ ์น๊ตฌ์ ์ต์์ ์
๏นกmax : ๊ฑด๋๋ ์น๊ตฌ์ ์ต๋์ ์
canCrossStone() : ํ์ฌ์ ์น๊ตฌ์ ์๊ฐ k์นธ์ ๋ฏธ๋ง์ผ๋ก ๊ฑด๋ ์ ์๋ ์ง ํ์ธ
์ฝ๋
public class ์ง๊ฒ๋ค๋ฆฌ๊ฑด๋๊ธฐ {
public static int solution(int[] stones, int k) {
int answer = 0;
int min = 1;
int max = 200000000;
while(min <= max){
int mid = (min+max)/2;
if(canCrossStone(stones, k, mid)){
min = mid + 1;
answer = Math.max(answer, mid);
}
else
max = mid - 1;
}
return answer;
}
private static boolean canCrossStone(int[] stones, int k, int mid) {
int skip = 0;
for(int s : stones){
if(s - mid < 0)
skip++;
else
skip = 0;
if(skip == k)
return false;
}
return true;
}
public static void main(String[] args) {
int[] stones = {2, 4, 5, 3, 2, 1, 4, 2, 5, 1};
System.out.println(solution(stones, 3));
}
}