728x90
https://school.programmers.co.kr/learn/courses/30/lessons/64062
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🤔 문제분석
n명의 사람이 징검다리를 건널때, 최대 몇명이 건널 수 있는지 찾는 문제로 사람의 명수를 기준으로 이분탐색 정답을 찾아냈습니다.
- start = 0, end = 200000001 ( 징검다리가 버틸 수 있는 최대 크기 200000000)
- mid 값을 기준으로 징검다리를 건널 수 있는지 없는지 확인하는데, 연속적으로 k개의 다리를 띄어 넘을 수 없다면 건널 수 없다.
- 건널 수 있냐 (?) 건널수 없냐(?) 의 조건에 따라서 start와 end 값을 지정해준다.
- 건널 수 있다면 사람의 명수를 늘려본다.
- 건널 수 없다면 사람의 명수를 줄인다.
💻 코드
def solution(stones, k):
start = 0
end = 200000001
answer = -1
n = len(stones)
while end >= start:
mid = (start + end) // 2
cnt = 0
can_go = True
for i in range(n):
# 해당돌을 건널 수 없음
if mid > stones[i]:
cnt += 1
else:
cnt = 0
if cnt >= k:
can_go = False
break
if can_go:
answer = max(mid, answer)
start = mid + 1
else:
end = mid - 1
return answer
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 호텔 방 배정 (0) | 2024.05.15 |
---|---|
[프로그래머스] 크레인 인형뽑기 (0) | 2024.05.15 |
[프로그래머스] 빛의 경로 사이클 (1) | 2024.05.12 |
[프로그래머스] 금과 은 (0) | 2024.05.12 |
[프로그래머스] 트리 트리오 중간값 (0) | 2024.05.11 |