why...
์...
์ด๊ฑฐ ์ง์ง ๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ๋ง.. ํ์ฐธ ๊ฑธ๋ฆฐ๋ฏใ ใ ์๊ดด๊ฐ๋ค์ด์........ ์ด๋ถํ์ ๋๋ฌด ์ด๋ ค์...
์์์กฐ์ฐจ ํ์ง๋ชปํ๊ณ ๊ณ ๋ฏผ๋ง ๋๋ฌด ์ค๋ํด์ ๊ฒฐ๊ตญ ๊ตฌ๊ธ์ ํ์ ๋น๋ ธ๊ณ .. ๋จผ์ ํ์ด๋ณด์ ๋ถ๋ค ์กด๊ฒฝํ๊ณ ๊ฐ์ฌํฉ๋๋ค๐ญ
์ฒ์์๋ ๊ฐ์ฅ ์ฒซ ์ง, ๋์ง์ ๋ฌด์กฐ๊ฑด ๊ณต์ ๊ธฐ๋ฅผ ๋๊ณ ๊ฐ์ด๋ฐ๋ฅผ ์ด๋ป๊ฒ ์ฎ๊ฒจ์ผ ํ๋ ๊ณ ๋ฏผ์ ํ๋๋ฐ
์ข๋ ๋ด๊ฐ ํ์ด๋ณผ๋งํ? ์ฝ๋๋ก ์ง๋ณผ๋งํ? ์ค๋ช ์ ํ๋ ์ฝ์ด์ ๊ทธ๊ฑธ ํ ๋๋ก ๋ค์ ๊ณ ๋ฏผ
์ค์ํ๋ ๊ฒ
- ์ง์ ์ค๋ณต๋ ์ขํ๊ฐ ์์ผ๋ฏ๋ก ์ง๊ณผ ์ง ์ฌ์ด์ ์ต์ ๊ฐ๊ฒฉ์ ๋ฌด์กฐ๊ฑด 1 ์ด๋ค!!! (s = 1)
- ์ง~์ง ์ฌ์ด์ ์ต๋ ๊ฐ๊ฒฉ์ ์ฒซ์ง~๋์ง (e = house[-1] - house[0])
- ๊ทธ๋์ ์ง๊ณผ ์ง ์ฌ์ด์ ๊ฐ๊ฒฉ(dist)๋ฅผ ์ต์(s)์ ์ต๋(e) ์ฌ์ด์์ ์๋ค๊ฐ๋ค ํ๋ฉด์ ์ ๋นํ ๊ฐ์ ์ฐพ๋๊ฒ์ด ๋ชฉํ.
์ฝ๋ ์ด์ ์ ์คํํ๋ฉด ๋จผ์ !
๋๋ dist = 4์นธ ์ด์์ฉ ๋จ์ด๋จ๋ ค์ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๊ณ ์ถ๋ค
๊ทธ๋์ ์ฒซ์ง(A)์๋ ๋ฌด์กฐ๊ฑด ๊ณต์ ๊ธฐ๋ฅผ ์ผ๋จ ์ค์นํ๊ณ (cnt = 1), 4์นธ์ฉ ๊ฐ๋ฉด์ ๊ณต์ ๊ธฐ๋ฅผ ๋ฌ ์ ์๋์ง ํ์ธํ ๊ฒ์ด๋ค.
for๋ฌธ์ ๋๋ฉด์ ๊ฐ ์ง๋ง๋ค ํ์ธ์ ํ๋ค.
- B๋ 1์นธ๋ฐ์ ์ฐจ์ด๊ฐ ์๋์ ์๋จ
- C๋ 3์นธ ๋จ์ด์ ธ์ ์๋จ
- D๋ 7์นธ ๋จ์ด์ ธ์์ด์ ํฉ๊ฒฉ! ๊ณต์ ๊ธฐ ํ๋ ์ค์น! cnt = 2 ํ๊ณ , ์ด์ ๋ D๋ฅผ ๊ธฐ์ค์ผ๋ก 4์นธ ๋จ์ด์ง ๋ค์ ์ง์ ์ฐพ๊ณ ์ถ๋ค
- E๋ D์ 1์นธ ๋จ์ด์ ธ์๊ธฐ๋๋ฌธ์ ์๋จ
๊ทธ๋ ๊ฒ ๋ชจ๋ ์ง์ ๋ค ๋์์ ๊ณต์ ๊ธฐ๋ฅผ ์ด 2๊ฐ ์ค์นํ๊ฒ ์์ ๊ฒฝ์ฐ์ด๋ค. 3๊ฐ ์ค์นํ๊ณ ์ถ์๋๋ฐ ๋๋ฌด ์ ๋ค.
๊ณต์ ๊ธฐ๊ฐ ๋๋ฌด ์ ๊ฒ ์ค์น๋๊ฑธ ๋ณด๋ ๊ฑฐ๋ฆฌ๊ฐ ๋๋ฌด ๋ฌ์ฑ๋ฌ์ฑ ํ๋๊ฒ๊ฐ์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ด๊ฒ ๋๋ค (e = c - 1)
dist ๋ฅผ ๊ณ์ฐํ๋ฉด 2๊ฐ ๋์จ๋ค.
A์ ๊ณต์ ๊ธฐ๋ฅผ ์ฌ์ด์ cnt = 1
- A~B๋ 1์นธ์ด๋ผ ์คํจ
- A~C๋ 3์นธ์ด๋ผ ์ฑ๊ณต cnt = 2
- C~D๋ 4์นธ์ด๋ผ ์ฑ๊ณต cnt = 3
- D~E๋ 1์นธ์ด๋ผ ์คํจ
์ด cnt = 3์ผ๋ก ๋ด๊ฐ ์ํ๋๋งํผ ๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๊ธฐ๋ ํ์ง๋ง
๊ฐ๊ฒฉ์ ์ข ํค์๋ณด๊ธฐ๋ก ํ์ฌ s = c + 1 ๋ก ๋ณ๊ฒฝ. dist = 3์ด ๋๋ค
A์ ๊ณต์ ๊ธฐ ์ฌ์ด์ cnt = 1
- A~B๋ ๊ฑฐ๋ฆฌ 1๋ก ์คํจ
- A~C๋ ๊ฑฐ๋ฆฌ 3์ผ๋ก ์ฑ๊ณต cnt = 2
- C~D๋ ๊ฑฐ๋ฆฌ 4๋ก ์ฑ๊ณต cnt = 3
- D~E๋ ๊ฑฐ๋ฆฌ 1 ์คํจ
๊ณต์ ๊ธฐ 3๊ฐ๋ฅผ ์ฌ์๋๋ฐ, dist๋ 3์ด ๋๋ฏ๋ก ์ด๊ฒ ๋ต์ด ๋จ...
๐โ๏ธ์์ฑํ ์ฝ๋
# 2110 ๋ฒ : ๊ณต์ ๊ธฐ ์ค์น
def binary_search_2110():
# n, c = map(int, input().split())
# house = []
# for _ in range(n):
# house.append(int(input())) #์ง์ ์ขํ๋ฅผ ์
๋ ฅ๋ฐ์
n = 5
c = 3
house = [1,2,8,4,9]
house.sort() #1,2,4,8,9
e = house[-1] - house[0] #์ฒซ์ง์์ ๋์ง๊น์ง์ ๊ฑฐ๋ฆฌ : ๊ฐ๊ฒฉ์ค ์ต๋ ๊ฐ๊ฒฉ
s = 1 #๊ฐ๊ฒฉ์ค ์ต์๊ฐ๊ฒฉ (์ต์๊ฐ๊ฒฉ์ด ๋ ์์๋๊ฑด 1์. ์ค๋ณต ์ขํ๊ฐ ์๋ค๊ณ ํ์ผ๋ 0 ๋ถ๊ฐ)
while s <= e :
cnt = 0
dist = (e+s) // 2 #๊ณต์ ๊ธฐ๋ฅผ ์ค์นํ๊ธฐ์ํด ๊ฐ์ฌ๋ ๊ฑฐ๋ฆฌ
print('dist-------------------------------------', dist)
prev_house = house[0]
cnt += 1 #๋งจ ์ฒซ์ง์ ๊ณต์ ๊ธฐ ํ๋ ์ค์น
print('cnt ---', cnt)
for i in range(1, len(house)):
print('---------------------------i ', i)
tmp_house = house[i]
d = tmp_house - prev_house #๋ ์ง ์ฌ์ด์ ๊ฑฐ๋ฆฌ
print('tmp_house...', tmp_house, '// d...' ,d)
if d >= dist :
cnt += 1
prev_house = tmp_house
print('cnt ---', cnt)
else :
continue
if cnt < c : #์ค์นํ ๊ณต์ ๊ธฐ๊ฐ ๋ชจ์๋ฅด๋ค๋ฉด(๊ฐ๊ฒฉ์ด ๋๋ฌด ๋์ด์)
e = dist - 1 #๊ฑฐ๋ฆฌ๋ฅผ ์ค์ด์
else : #๊ณต์ ๊ธฐ๊ฐ ๋ฑ๋ง๊ฑฐ๋ or ๋๋ฌด๋ง์ด ์ค์น๋๋ค๋ฉด (๊ฐ๊ฒฉ์ด ์ด์ดํด์)
s = dist + 1 #๊ฑฐ๋ฆฌ๋ฅผ ๋๋ฆฌ์
answer = dist
print(answer)
'๐๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ๋ค์ ํฐ ์ซ์ (0) | 2020.12.05 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค Lv.2] ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2020.11.30 |
[๋ฐฑ์ค] 2805๋ฒ ๋๋ฌด ์๋ฅด๊ธฐ (0) | 2020.11.24 |
[๋ฐฑ์ค] 10816๋ฒ ์ซ์ ์นด๋2 (0) | 2020.11.22 |
[๋ฐฑ์ค] 1654๋ฒ ๋์ ์๋ฅด๊ธฐ (0) | 2020.11.20 |
๋๊ธ