๐ 1. ๋ฌธ์ ์ค๋ช
์ถ๋ฐ์ง์ ๋ถํฐ distance๋งํผ ๋จ์ด์ง ๊ณณ์ ๋์ฐฉ์ง์ ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ์ฌ์ด์๋ ๋ฐ์๋ค์ด ๋์ฌ์์ต๋๋ค. ๋ฐ์ ์ค ๋ช ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ฐฉ์ง์ ์ด 25๋งํผ ๋จ์ด์ ธ ์๊ณ , ๋ฐ์๊ฐ [2, 14, 11, 21, 17] ์ง์ ์ ๋์ฌ์์ ๋ ๋ฐ์ 2๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ์ถ๋ฐ์ง์ , ๋์ฐฉ์ง์ , ๋ฐ์ ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์๋์ ๊ฐ์ต๋๋ค.
์์์ ๊ตฌํ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ 4์
๋๋ค.
์ถ๋ฐ์ง์ ๋ถํฐ ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ distance, ๋ฐ์๋ค์ด ์๋ ์์น๋ฅผ ๋ด์ ๋ฐฐ์ด rocks, ์ ๊ฑฐํ ๋ฐ์์ ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐ์๋ฅผ n๊ฐ ์ ๊ฑฐํ ๋ค ๊ฐ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ distance๋ 1 ์ด์ 1,000,000,000 ์ดํ์ ๋๋ค.
- ๋ฐ์๋ 1๊ฐ ์ด์ 50,000๊ฐ ์ดํ๊ฐ ์์ต๋๋ค.
- n ์ 1 ์ด์ ๋ฐ์์ ๊ฐ์ ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
๐ก 2. ์ ๊ทผ๋ฐฉ์
์๊ฐ ๋ณต์ก๋ ๋๋ฌธ์ ๋ธ๋ฃจํธ ํฌ์ค๋ก ํ๋ฉด ์กฐํฉ์ ๊ฐฏ์๊ฐ ๋๋ฌด ์ปค์ ธ์ ์ ๋๊ณ ์ด๋ถํ์์ผ๋ก ํด์ผ ํ๋ค.
์์งํ ์ด๋ถ ํ์์ ์ด ๋ฌธ์ ์ ์ด๋ป๊ฒ ์ ์ฉํ ์ง ๊ฐ์ด ์ ์กํ์ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ฅผ ๋ดค๋ค.
์ฝ๋๋ฅผ ์ง๋ ๊ฒ๋ณด๋ค ์ด๋ถํ์์ ์ด ๋ฌธ์ ์ ์ด๋ป๊ฒ ์จ๋จน์ ์ง๊ฐ ๋๋ฌด ์ด๋ ค์ ๊ณ
๊ทธ๊ฑธ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ธ๋ค.
๊ฐ ์์กํ์๋ ๋ถ๋ค์ ์ด ๋ธ๋ก๊ทธ ๋ณด์๋ฉด ๊ทธ๋ฆผ์ผ๋ก ์น์ ํ๊ฒ ์ค๋ช
์ด ๋์ด ์๋ค.
๋๋ ์ด๊ฑฐ ๋ณด๊ณ ๋ฐ๋ก ๋ฌด์จ ๋ง์ธ์ง ๊ฐ ์ก์๋ค ใ
ใ
ใ
ใ
์.....
์ง์ง ์ง์ง ์ฝ๊ฒ ์ค๋ช
ํด๋ณด๊ฒ ๋ค...
๋จผ์ rocks๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด ์ค๋ค.
[2, 11, 14, 17, 21] -> [2, 11, 14, 17, 21]
๊ทธ๋ฆฌ๊ตฌ ๊ฐ ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ด์์ค ๋ฐฐ์ด interval[] ์ ์ ์ธ
rocks์ ๋ค์ด์๋ ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐ ํด์ ๋ด์์ค๋ค.
๋์ด 0๋ถํฐ 25 ์ฌ์ด์ ๋์์ ธ ์์ผ๋๊น intervalํฌ๊ธฐ๋ rocks.length+1 ๋ก ํด ์ค๋ค
0~2 | 2~11 | 11~14 | 14~17 | 17~21 | 21~5 |
2 | 9 | 3 | 3 | 4 | 4 |
๊ณ ๋ก interval์ [2, 9, 3, 3, 4, 4]
์ผ๋จ mid๋ผ๋ ๊ฐ์
์ ๋ต์ด ๋ ์ ์๋ ํ๋ณด
๋ผ๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
mid ๊ฐ์ ์์๋ก ์ค์ ํด ์ฃผ๋ฉด์ ์ด์ง ํ์์ ํ๋๊ฑด๋ฐ ์ด mid ๊ฐ์ ๋ฐ๋ผ ๋์ ์ ๊ฑฐ ํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
interval ์์๋ฅผ sum์ ํ๋์ฉ ๋์ ํด ์ฃผ๋ฉด์ ์ด ๊ฐ์ด mid ๊ฐ๋ณด๋ค ์์ผ๋ฉด ๋์ ์ ๊ฑฐํด์ ๊ตฌ๊ฐ์ ํฉ์ณ ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ฑฐํ ๋์ ์๊ฐ n๋ณด๋ค ํฐ์ง ํ์ธํ๋ค.
n๋ณด๋ค ํฌ๋ฉด ๋์ด ๋๋ฌด ๋ง์ด ์ ๊ฑฐ๋ฌ๊ธฐ ๋๋ฌธ์ ํ์ ๊ตฌ๊ฐ์ ์ผ์ชฝ์ผ๋ก ์ขํ ์ฃผ๊ณ ,
๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๊ฑฐ ํด์ผ ํ๋ ๋๋ณด๋ค ๋ ๋ง์ ๋์ด ์ ๊ฑฐ๋์๊ธฐ ๋๋ฌธ์ ๊ตฌ๊ฐ์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ค์ ํ๋ค.
๊ทธ๋๊น ์ด์งํ์ ์ํํ๋ ๋์ while ๋ฌธ ์์ ์กฐ๊ฑด์ด ๋๊ฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๊ฐ๋จํ๋ค.
์ฒซ๋ฒ์งธ๋ก ๋น๊ตํ ์กฐ๊ฑด์ mid๋ ๊ตฌ๊ฐ ๊ฑฐ๋ฆฌ๋ค์ ํฉ sum
=> ๋์ ์ ๊ฑฐํ ์ง ๋ง์ง ๊ฒฐ์ ํฌ์ธํธ
๋๋ฒ์งธ๋ก ๋น๊ตํ ์กฐ๊ฑด์ ์ ๊ฑฐ๋ ๋ฐ์์ ์์ ์ ๊ฑฐํด์ผ ํ ๋ฐ์์์ n
=> ํ์ ๊ตฌ๊ฐ์ ์ผ์ชฝ์ผ๋ก ํ ์ง ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์ง ๊ฒฐ์ ํฌ์ธํธ
์, interval ์ด [2, 9, 3, 3, 4, 4] ์ผ๋
์ฒ์์๋ mid = ( 1 + 25 ) / 2 ๋๊น 13์ด๋ค.
interval[0] = 2 < 13, ๋ฐ์ ์ ๊ฑฐ
interval[0] + interval[1] = 2 + 9 = 11 < 13, ๋ฐ์ ์ ๊ฑฐ
interval[0] + interval[1] + interval[2] = 2 + 9 + 3 = 14 < 13
๋ฐ์์ ๊ฑฐ ์ํ๊ณ ๊ฑฐ๋ฆฌ ํฉ์ 0์ผ๋ก ์ด๊ธฐํ ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ Interval[3] = 3 < 13, ๋ฐ์ ์ ๊ฑฐ
interval[3] + interval[4] = 3 + 4 = 7 < 13, ๋ฐ์ ์ ๊ฑฐ
interval[3] + interval[4] + interval[5] = 3 + 4 + 4 = 11 < 13๋ฐ์ ์ ๊ฑฐ
์ฌ๊ธฐ๊น์ง ์ ๊ฑฐํ ๋ฐ์์ 5์ธ๋ฐ ๋ฌธ์ ์์ ์ ๊ฑฐํด์ผ ํ ๋ฐ์ ์ 2์ด๋ค.
๋ฌธ์ ์์ ์ ๊ฑฐํ ๋ฐ์ ์๊ฐ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ mid = 13์ ๋๋ฌด ํฐ ๊ฐ์ด๋ผ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ผ์ชฝ์ผ๋ก ์ขํ๋ ๋จ ใ
ใ
ใ
ใ
right = mid - 1 ๋ก ์ค์ ํด ์ค์ right๋ 12๊ฐ ๋๋ค.
์ด๋ ๊ฒ ๊ณ์ ๋ฐ๋ณต์ ํด ์ฃผ๋ฉด ๋๋ค.
์ดํดํ๋ฉด ์ ๋ง ์ฌ์ด ๋ฌธ์ ์ด์ง๋ง ์ดํดํ๊ธฐ ์ ๊น์ง๋ ์๊ฐ์ ์ค๋ ํด์ผ ํ๋ค~
โญ 3. ์ฝ๋
์ฒซ๋ฒ์งธ ์๋ ํ๋ฆผ
์... ๋? ๋ถ๋ช
ํ ์ ๋๋ก ํ๋๋ฐ ์ด๋๊ฐ ์๋ชป๋๋
์คํ ๊ฒฐ๊ณผ๊ฐ 13์ด๋ผ๊ณ ์ค๋ฐ์ธ๋ฐ ^^;;;
์ฒ์์ interval[] ์ด๊ธฐํ ์๋ชปํ๋ค.
๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ด์์ผ ํ๋๋ฐ ๊ทธ๋ฅ ์๊ฐ ์์ด ์ฐ๋ค๊ฐ ๋ฐ์ ์์น ๊ทธ๋๋ก ๋ด์^^
for(int i = 1; i < rocks.length; i++) {
interval[i] = rocks[i];
}
for(int i = 1; i < rocks.length; i++) {
interval[i] = rocks[i] - rocks[i - 1];
}
์ ๋ต์ฝ๋
import java.util.*;
class Solution {
public int solution(int distance, int[] rocks, int n) {
int answer = 0;
Arrays.sort(rocks);
int[] interval = new int[rocks.length+1];
interval[0] = rocks[0];
interval[rocks.length] = distance - rocks[rocks.length-1];
for(int i = 1; i < rocks.length; i++) {
interval[i] = rocks[i] - rocks[i - 1];
}
int left = 1;
int right = distance;
while(left <= right) {
int mid = (left + right) / 2;
int removedRocks = 0;
int sumd = 0;
for(int i = 0; i < interval.length; i++) {
sumd += interval[i];
if(sumd < mid) {
removedRocks++;
} else {
sumd = 0;
}
}
if (removedRocks > n) {
right = mid - 1;
} else {
left = mid + 1;
answer = mid;
}
}
return answer;
}
}
์ฃผ์ ๋ฌ๊ธฐ๊ฐ ๊ท์ฐฎ๋ค..
๊ทธ๋ฆฌ๊ณ intervals๋ก ํ ๊ฑธ ๊ทธ๋ฅ interval๋ก ํ๋ค์
๋ณ์๋ช
sumd๋ sumDistance ํ๋ ค๋ค๊ฐ ๋๋ฌด ๊ธธ์ด์ ์ค์์ต๋๋ค~
์ฒ์์๋ ์ฐ๋ฉด์ ์กฐ๊ฑด๋ฌธ ์์น๊ฐ ํท๊ฐ๋ ธ๋ค. while ๋ฌธ ์์ for๋ฌธ์ ๋ ์ ๊ฑฐํ๋ ๋ก์ง์ด๊ณ , for ๋ฌธ๊ณผ ๋ณ๊ฐ๋ก ์๋ if ๋ฌธ์ด ์ ๊ฑฐ๋ ๋ฐ์ ์๊ณผ ์ ๊ฑฐํ ๋ฐ์์๋ฅผ ๋น๊ตํ๋ ์ด๋ถํ์ ๋ก์ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ removedRocks๊ฐ n๋ณด๋ค ํฐ ๊ฒฝ์ฐ์๋ง ํ์ ๋ฒ์๊ฐ์ ์ผ์ชฝ์ผ๋ก ์ฎ๊ฒจ์ฃผ๋ ๊ฒ์ด๊ณ ๋ง์ฝ ์ ๊ฑฐ๋ ๋ฐ์ = ์ ๊ฑฐํด์ผ ํ๋ ๋ฐ์ ์๊ฐ ๊ฐ์์ก๋ค?
๊ทธ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฒ ๋ ํ์ํด ์ค์ผ ํ๋ค. (๋ ํฐ ๊ฐ ์์ ์๋ ์์ผ๋๊น)
๐๐ป 4. ๊ฐ์ ์ ํ ๋ฌธ์ (์ด์งํ์)