▶ 문제 : https://programmers.co.kr/learn/courses/30/lessons/64062
▶ 이분탐색을 이용해서 풀이한다.
▶ 정규표현식으로 "0이 연속된 개수" 구하면 시간초과 !
▶ 이분탐색 코드 (정답)
# 건널 수 없는 경우가 있으면 false -> 이때, mid값을 줄여줘야됨
# 건널 수 없는 경우가 없으면 true -> 이때, mid값을 키워줘야됨
def isPossible(stones, k, mid):
disappearedStones = 0
for s in stones:
if s - mid <= 0:
disappearedStones += 1
if disappearedStones == k: # disappearedStones이 연속해서 k개가 나오면, False
return False
else:
disappearedStones = 0
return True
def solution(stones, k):
answer = 0
left = 1
right = 200000000 # stones의 원소값은 1 ~ 200,000,000
while left <= right:
mid = (left + right) // 2
print('[left, right, mid]=', left, right, mid)
if isPossible(stones, k, mid):
print('>[true]')
left = mid + 1 # mid값을 키워야 되니까, 반갈죽에서 오른쪽 택하겠다
else:
print('>[false]')
answer = mid # false일때, mid값으로 answer를 업데이트 해나간다.
# mid값(=빼야할 숫자)이 결국, 다리를 건넌 사람수와 동일 !
# Why? 문제의 조건 : 한명 건널때마다 전체 1씩 감소시키는 조건
right = mid - 1 # mid값을 줄여야 되니까, 반갈죽에서 왼쪽 택하겠다
print(answer)
return answer
solution([2, 4, 5, 3, 2, 1, 4, 2, 5, 1], 3)
(정답 참조 : https://hellominchan.tistory.com/262)
'■코테 기출문제 > 2019 카카오 개발자 겨울 인턴십' 카테고리의 다른 글
[Level 3] 불량 사용자 (0) | 2020.05.13 |
---|---|
[Level 2] 튜플 (0) | 2020.05.13 |
[Level 1] 크레인 인형뽑기 게임 (0) | 2020.05.13 |