๐ค๋ฌธ์ ํด๊ฒฐ
Lv4 | ์ด๋ถ ํ์
๋ฑ ๋ณด์๋ง์ ์ด๋ถํ์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ํ์ง๋ง ๋ฌธ์ ์นดํ
๊ณ ๋ฆฌ์ ์จ์๋ค.
์ด๋ถํ์์ ํ๋ ค๋ฉด ์ด๋ค ๊ฐ์ ์๋ค ๊ฐ๋ค ์ด๋ถํ์ํ ์ง ์ ํด์ผ ํ๋ค.
์ฌ๊ธฐ์๋ ๋ต์ผ๋ก ๊ตฌํด์ผ ํ๋ ์ต๋๊ฐ์ ์ด๋ถํ์ ํ๋ค.
- ๋จผ์ ๋ต์ ์ ํด๋๊ณ ์์ํ๋ค. 0๊ณผ ๋ง์ง๋ง ์ง์ ์ธ distance(25)๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ด๋ฐ ๊ฐ์ผ๋ก 12๋ก ์ ํ๋ค.
- ์ด ๋ฌธ์ ์ ๋ต์ด 12๋ผ๋ฉด ๋ฐ์๋ฅผ n๊ฐ ์ ๊ฑฐํ์ ๋ ์ต์ ๊ฑฐ๋ฆฌ๊ฐ 12์ธ ๋ ์์ด ์์ด์ผ ํ๋ค.
- ์ฒ์ ์์น๋ฅผ 0์ผ๋ก ๋๊ณ ๋ค์ ๋ฐ์๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ mid(12) ๋ณด๋ค ์์ผ๋ฉด ์ ๊ฑฐ ์๋๋ฉด ๊ทธ ๋ฐ์๋ก ์ด๋
- 0 ์์ 2 ๊น์ง์ ๊ฑฐ๋ฆฌ 2 < 12 : ์ ๊ฑฐ
- 0 ์์ 11 ๊น์ง์ ๊ฑฐ๋ฆฌ 11 < 12: ์ ๊ฑฐ
- 0 ์์ 14 ๊น์ง์ ๊ฑฐ๋ฆฌ 14 > 12: ์ด๋ ค๋ and 14๋ก ์ด๋
- 14 ์์ 17 ๊น์ง์ ๊ฑฐ๋ฆฌ 3 < 12: ์ ๊ฑฐ
- 14 ์์ 21 ๊น์ง์ ๊ฑฐ๋ฆฌ 7 < 12: ์ ๊ฑฐ
- 14 ์์ 25 ๊น์ง์ ๊ฑฐ๋ฆฌ 11 < 12: ์ ๊ฑฐ
- ํ์ง๋ง ์ ๊ฑฐํ ๋ฐ์๊ฐ ๋๋ฌด ๋ง์ผ๋ฏ๋ก ๊ธฐ์ค๊ฐ์ ์ค์ฌ๋ณด์
- right = mid - 1
- (left + right) // 2 = 5
๋ง์ง๋ง ๊ทธ๋ฆผ์ ๋ณด๋ฉด ๋ฐ์๊ฐ n๊ฐ ์ ๊ฑฐ ๋์ ๋ ์ต์๊ฐ ์ด 4 ๋ผ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ต์ 4๋ก ๊ฐ์ ํด ๋๊ณ n ๊ณผ 4๋ฅผ ์ป์์ผ๋ฏ๋ก ์กฐ๊ฑด์ ๋ง๋๋ค.
๐ป์์ค ์ฝ๋
def solution(distance, rocks, n):
answer = 0
rocks.sort() # ์ง๊ฒ๋ค๋ฆฌ ์ ๋ ฌ
rocks.append(distance) # ๋ง์ง๋ง ๋์ฐฉ์ง์์ ๊ฑฐ๋ฆฌ๊น์ง ๊ณ์ฐํ๊ธฐ ์ํด
left, right = 0, distance # ์ด๋ถ ํ์ ์คํํธ!
while left <= right:
# ๋๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ mid๋ก ์ก๊ฒ ๋ค!(๊ฑฐ๋ฆฌ๊ฐ mid ์ดํ์ด๋ฉด ๋ค ์์ค๋ค!)
mid = (left + right) // 2
min_distance = float('inf') # ๊ฐ mid ์์ ์ต์๊ฐ์ ์ ์ฅํ ๋
์
current = 0 # ํ์ฌ ์์น
remove_cnt = 0 # ๋ฐ์๋ฅผ ์ ๊ฑฐํ ๊ฐ์
# ๊ฑฐ๋ฆฌ ์ฌ๊ธฐ ์คํํธ
for rock in rocks:
diff = rock - current # ๋ฐ์์ ํ์ฌ ์์น ์ฌ์ด์ ๊ฑฐ๋ฆฌ
if diff < mid: # mid ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ์งง์ผ๋ฉด ๋ฐ์ ์ ๊ฑฐ
remove_cnt += 1
else: # mid ๋ณด๋ค ๊ฑฐ๋ฆฌ๊ฐ ๊ธธ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ฐ์ ๊ทธ๋๋ก ๋๊ณ
current = rock # ํ์ฌ ์์น๋ฅผ ๊ทธ ๋ฐ์๋ก ์ฎ๊ธฐ๊ณ
min_distance = min(min_distance, diff) # ํด๋น mid ๋จ๊ณ์์์ ์ต์๊ฑฐ๋ฆฌ์ธ์ง ์ฒดํฌ
# mid๋ฅผ ์ค์ ํ๋ ๋จ๊ณ
if remove_cnt > n: # ๋ฐ์๋ฅผ ๋๋ฌด ๋ง์ด ์ ๊ฑฐ ํ๋ค. mid๋ฅผ ์ค์ฌ์ ๋ฐ์๋ฅผ ์กฐ๊ธ๋ง ์ ๊ฑฐํ์
right = mid - 1
else: # ๋ฐ์๋ฅผ ๋๋ฌด ์ ๊ฒ ์ ๊ฑฐํ๋ค and ๋ฑ ๋ง๋ค. mid๋ฅผ ๋๋ ค์ ๋ฐ์๋ฅผ ๋ ์ ๊ฑฐํ๊ฑฐ๋ mid์ ์ต๋๊ฐ์ ์ฌ๋ ค๋ณด์
answer = min_distance
left = mid + 1
return answer
print(solution(25, [2, 14, 11, 21, 17], 2))
๐๋ฌธ์ ํ์ธ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค
๋งํฌ: https://programmers.co.kr/learn/courses/30/lessons/43236?language=python3
๋ฌธ์ ์ค๋ช
์ถ๋ฐ์ง์ ๋ถํฐ 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 |
'Algorithm Problem > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ซ์ ๋ธ๋ก (1) | 2020.09.15 |
---|---|
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋จ์ด ํผ์ฆ(2017 ํ์คํ์ด) (0) | 2020.09.14 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - N-Queen (2) | 2020.09.13 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ๋๋์ง (0) | 2020.09.12 |
[python] ํ๋ก๊ทธ๋๋จธ์ค - ์ฌํ๊ฒฝ๋ก (0) | 2020.09.12 |