2021. 12. 10. 22:05ใETC/Algorithm
๐ ๋ฌธ์ ๋งํฌ ์ด๋ถํ์ ๋ฌธ์ !
๋ฌธ์ ์ค๋ช
์ถ๋ฐ์ง์ ๋ถํฐ distance๋งํผ ๋จ์ด์ง ๊ณณ์ ๋์ฐฉ์ง์ ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ์ฌ์ด์๋ ๋ฐ์๋ค์ด ๋์ฌ์์ต๋๋ค. ๋ฐ์ ์ค ๋ช ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋์ฐฉ์ง์ ์ด 25๋งํผ ๋จ์ด์ ธ ์๊ณ , ๋ฐ์๊ฐ [2, 14, 11, 21, 17] ์ง์ ์ ๋์ฌ์์ ๋ ๋ฐ์ 2๊ฐ๋ฅผ ์ ๊ฑฐํ๋ฉด ์ถ๋ฐ์ง์ , ๋์ฐฉ์ง์ , ๋ฐ์ ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์๋์ ๊ฐ์ต๋๋ค.
์ ๊ฑฐํ ๋ฐ์์ ์์น | ๊ฐ ๋ฐ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ | ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ |
[21, 17] | [2, 9, 3, 11] | 2 |
[2, 21] | [11, 3, 3, 8] | 3 |
[2, 11] | [14, 3, 4, 4] | 3 |
[11, 21] | [2, 12, 3, 8] | 2 |
[2, 14] | [11, 6, 4, 4] | 4 |
์์์ ๊ตฌํ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ 4์ ๋๋ค.
์ถ๋ฐ์ง์ ๋ถํฐ ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ distance, ๋ฐ์๋ค์ด ์๋ ์์น๋ฅผ ๋ด์ ๋ฐฐ์ด rocks, ์ ๊ฑฐํ ๋ฐ์์ ์ n์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐ์๋ฅผ n๊ฐ ์ ๊ฑฐํ ๋ค ๊ฐ ์ง์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋์ฐฉ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ distance๋ 1 ์ด์ 1,000,000,000 ์ดํ์ ๋๋ค.
- ๋ฐ์๋ 1๊ฐ ์ด์ 50,000๊ฐ ์ดํ๊ฐ ์์ต๋๋ค.
- n ์ 1 ์ด์ ๋ฐ์์ ๊ฐ์ ์ดํ์ ๋๋ค.
์ ์ถ๋ ฅ ์
distance | rocks | n | return |
25 | [2, 14, 11, 21, 17] | 2 | 4 |
๋ฌธ์ ํด๊ฒฐ
C++
int solution(int distance, vector<int> rocks, int n) {
int answer = 0;
int low=0, high=distance;
vector<int> dist;
sort(rocks.begin(), rocks.end());
rocks.push_back(distance);
while (low < high) {
int mid = (low+high) / 2;
int rm = 0, start = 0;
for (int roc: rocks) {
if (roc - start < mid) rm++;
else start = roc;
}
if (rm <= n) {
low = mid + 1;
if (mid > answer) answer = mid;
} else high = mid;
}
return answer;
}
๋ฌธ์ ์ ๊ทผ๋ฒ
๊ฐ์ฅ ๋จผ์ ์ด๋ถํ์ ์กฐ๊ฑด์ผ๋ก ๋ฐฐ์ด์ ์ ๋ ฌํ ํ, [0 ~ ๋ง์ง๋ง ๋ ~ distance] ๊น์ง์ ๊ฑฐ๋ฆฌ๊น์ง ๊ณ ๋ คํ๊ธฐ ์ํด distance๋ฅผ ๋ฐฐ์ด์ ์ถ๊ฐํฉ๋๋ค.
์ด๋ถ ํ์์์ ๋จผ์ ์ง๊ณ ๊ฐ์ผํ ๊ฒ์ ์ด๋ค ๊ฒ์ ๊ฒ์ํ ๊ฒ์ธ์ง์ ์ด๋ค ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ ๊ฒ์ธ์ง๋ฅผ ์ ํํ ํด์ผํ๋ ๊ฒ ์ค์ํ ๊ฒ ๊ฐ์์.
โ๏ธ ์ด๋ค ๊ฒ์ ๊ฒ์ํ ๊ฒ์ธ์ง -> ๋ ์ฌ์ด์ ๊ฐ๋ฅํ ์ต์ ๊ฑฐ๋ฆฌ ์ค ์ต๋๊ฐ
โ๏ธ ์ด๋ค ์กฐ๊ฑด์ผ๋ก ํํฐ๋งํ ๊ฒ์ธ์ง -> ์ต์ํ์ ๊ฐ๋ฅํ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ ํ ๊ฐ๋ฅํ ์กฐ๊ฑด์ธ์ง ํ๋จ ํ ์ต๋๊ฐ ๋ฐ์
์์ ์ ๋ ฅ๊ฐ์ผ๋ก ์ค๋ช ์ ์ด์ด๊ฐ๊ฒ ์ต๋๋ค.
// low = 0, high = 25, mid = 13
[0] 2 11 14 17 21 [25]
๋จผ์ mid ๊ฐ์ '์ต์ ๊ฐ๋ฅ์ฑ์ด ์๋ ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ'์์ ํ์ธํ๊ณ !
์ด๋ถํ์์ ๊ณผ์ ์ ๋ ๋จ๊ณ๋ก ๋๋์๋ฉด ์๋์ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
1. mid ๊ฐ์ ์ ์ฉํ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ถ ๐๐ป mid ๊ฑฐ๋ฆฌ๋ฅผ ์ต์๋ก ์ค์ ํ์ ๋, ๋ฐ์๊ฐ ๋ช ๊ฐ ์ ๊ฑฐ๋๋๊ฐ
2. ๊ฒฐ๊ณผ๊ฐ์ ์ ํจ์ฑ ํ๋จ ํ ๋ฒ์ ๊ฐฑ์ ๐๐ป mid ๊ฑฐ๋ฆฌ๋ฅผ ์ต์๋ก ์ค์ ํ์ ๋, ์ ๊ฑฐ๋ ๋ฐ์๊ฐ n์ ๋ฒ์ ๋ด์ ๋ค์ด์ค๋ ์ ํจ๊ฐ์ธ๊ฐ
์์ ๊ฐ์ด ๋ ๋จ๊ณ๋ก ๋๋์์ ๋๋ฅผ ํจ๊ป ์ดํด๋ณด๋๋ก ํ ๊ฒ์.
1. mid ๊ฐ์ ์ ์ฉํ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ถ
mid ๊ฑฐ๋ฆฌ๋ฅผ ์ต์๋ก ์ค์ ํ์ ๋, ๋ฐ์๊ฐ ๋ช ๊ฐ ์ ๊ฑฐ๋๋๊ฐ
์ด ๊ฐ์ด ์ต์๊ฐ์ธ์ง๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ผ๋ก ๋ช ๊ฐ์ ๋์ด ์ญ์ ๋๋ ์ง๋ฅผ ์ฒดํฌํด๋ณด๋ฉด ์๋์ ๊ฐ์์.
๊ฐฑ์ ๋๋ start ๋ ↓ ๋ก, ์ญ์ ๋๋ ๋์ R๋ก ํ์ํ๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
↓ ↓
[0] 2 11 14 17 21 [25]
R R R R R
์ฐจ๊ทผ์ฐจ๊ทผ ๋ณด์๋ฉด, 0์์ ๋ถํฐ ์์ํด์ ๊ฐ๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ mid(13) ๋ณด๋ค ์์ ๋ ๋์ ์์ ์ค๊ฑฐ์์.
0์ ๊ธฐ์ค์ผ๋ก ์ฒซ ๋ฒ์งธ ๋ฐ์์ ์์น 2๋ mid ๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ ๊ฑฐํ๋ค๋ฉด, [0, 11, 14, 17, 21, 25] ์ ํํ๋ก ๋ณด์ด๊ฒ ์ฃ .
๊ทธ๋ผ ๋ค์์ผ๋ก ๋ ๋ฒ์งธ ๋ฐ์์ ์์น 11๊ณผ์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ณผ๊น์? ๋ง์ฐฌ๊ฐ์ง๋ก mid๋ณด๋ค ์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ ๊ฑฐํ๋ค๋ฉด, [0, 14, 17, 21, 25] ์ ํํ๋ก ๋ณด์ด๊ฒ ์ฃ .
์ด ๋ฒ์๋ ์ธ ๋ฒ์งธ๋ฅผ ๋ณด๋๋ก ํ ๊ฒ์. (์ฐธ๊ณ ๋ก ์ญ์ ๋๋ ๋์ ๊ฐ์๋ ์ง๊ธ ์ ๊ฒฝ์ฐ์ง ์์์. ๋ช ๊ฐ์ ๋์ด ์ญ์ ๋๋์ง์ '๊ฐ๋ฅ์ฑ ํ๋จ'์ ์ด๋ถํ์์ ๋ฒ์๋ฅผ ์ง์ ํ ๋ ํ๋จํฉ๋๋ค.) ์ด ๋ฒ์๋ mid ๋ณด๋ค ํฌ๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ ์ ์์ด์.
๊ทธ๋์ ์ ๊ฑฐํ์ง ์๊ณ ๋ค ๋ฒ์งธ๋ก ๋์ด๊ฐ๋๋ค. ๊ทธ๋ผ ๋ค์ ๋ฐ์์์ ๊ฑฐ๋ฆฌ ๋น๊ต๋ ์ด์ ์ ๋์ธ [14] ๋ก ์ค์ ์ ํด์ผํ ํ ๋, start๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
์ด ๊ณผ์ ์ ๋ชจ๋ ์งํํ๊ฒ ๋๋ฉด, ์ ๊ฑฐ๋๋ ๋ฐ์์ ๊ฐ์๊ฐ 5๊ฐ์ธ ๊ฒ์ ํ์ธํ๊ณ , ์ด์ ๊ฐ๋ฅ์ฑ ํ๋จ์ ํด์ผํด์.
2. ๊ฒฐ๊ณผ๊ฐ์ ์ ํจ์ฑ ํ๋จ ํ ๋ฒ์ ๊ฐฑ์
mid ๊ฑฐ๋ฆฌ๋ฅผ ์ต์๋ก ์ค์ ํ์ ๋, ์ ๊ฑฐ๋ ๋ฐ์๊ฐ n์ ๋ฒ์ ๋ด์ ๋ค์ด์ค๋ ์ ํจ๊ฐ์ธ๊ฐ
mid๊ฐ 13์ผ ๋ ์ ๊ฑฐ๋๋ ๋ฐ์๋ 5๊ฐ์ ๋๋ค. n๋ณด๋ค ํฐ ์์ ๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ๋ฒ์๋ฅผ ์ง์ ํ๋ฉด ๋ ๊น์?
๋ฐ์๋ฅผ ์ค์ฌ์ผ๊ฒ ์ฃ ? ๊ทธ๋ผ high๋ฅผ ๋ฎ๊ฒ ์ฃผ๋ฉด ๋๊ณ , ์ด๋ถํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ํด high๊ฐ์ mid ๊ฐ์ผ๋ก ์ค์ ํ๋ฉด ๋ฉ๋๋ค.
์ด๋ ๊ฒ ๋ต์ ์ฐพ์ ๋๊น์ง ์งํํ๊ฒ ๋๋๋ฐ์.
๊ณ์ ์งํ์ํค๋ฉด ์๋์ ๊ฐ์์.
/* low = 0, high = 25, mid = 13
* R = 5, ์ต์ ๊ฑฐ๋ฆฌ ๋ถ๊ฐ๋ฅ
*/
↓ ↓
[0] 2 11 14 17 21 [25]
R R R R R
/* low = 0, high = 13, mid = 6
* R = 3, ์ต์ ๊ฑฐ๋ฆฌ ๋ถ๊ฐ๋ฅ
*/
↓ ↓ ↓ ↓
[0] 2 11 14 17 21 [25]
R R R
/* low = 0, high = 6, mid = 3
* R = 1, ์ต์ ๊ฑฐ๋ฆฌ ๊ฐ๋ฅ.
* ์ต์๊ฑฐ๋ฆฌ ์ค ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด answer๊ณผ ๋น๊ต ํ ๊ณ์ ์งํ
*/
↓ ↓ ↓ ↓ ↓ ↓
[0] 2 11 14 17 21 [25]
R
/* low = 4, high = 6, mid = 5
* R = 3, ์ต์ ๊ฑฐ๋ฆฌ ๋ถ๊ฐ๋ฅ.
*/
↓ ↓ ↓ ↓
[0] 2 11 14 17 21 [25]
R R R
/* low = 4, high = 5, mid = 4
* R = 2, ์ต์ ๊ฑฐ๋ฆฌ ๊ฐ๋ฅ.
* ์ต์๊ฑฐ๋ฆฌ ์ค ์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด answer๊ณผ ๋น๊ต ํ ๊ณ์ ์งํ
*/
↓ ↓ ↓ ↓ ↓
[0] 2 11 14 17 21 [25]
R R
// low = 5, high = 5 -> while ์กฐ๊ฑด ํ์ถ ~
์ดํด์ ๋์์ด ๋์ จ๋์ ใฐ๏ธ
๊ทธ๋ผ ๋ชจ๋ ์ฆ์ฝํ์ธ์.,,
'ETC > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers, ๋ณดํ์ ์ฒ๊ตญ (2) | 2021.12.08 |
---|---|
Programmers, ์ ๊ตญ์ฌ์ฌ (0) | 2021.12.04 |
programmers, ๋จ์์นด๋ฉ๋ผ (0) | 2021.12.03 |
Programmers, ์ฌ ์ฐ๊ฒฐํ๊ธฐ (2) | 2021.12.02 |
Programmers, ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ (0) | 2021.12.02 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐