Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 항해99솔직후기 #항해99 #부트캠프추천
- 부트스트랩 #Bootstrap #웹개발첫걸음 #스파르타코딩클럽
- 스파르타코딩클럽 #크롤링 #스크래핑
- #내일배움단 #코딩프로젝트 #국비지원 #내일배움카드 #스파르타코딩클럽
- 스파르타코딩클럽 #코딩 #jQuery #Ajax
Archives
- Today
- Total
이모저모
이진탐색 연습 - 징검다리(프로그래머스) 본문
이진탐색을 연습하는 중이라서, 바로 직전에 프린터 문제를 풀었더니 프린터 풀이 방식과 동일한 방식으로 풀게 되었다.
살짝 변화를 준 부분은, mid의 변화에 따라 [가장 인접한 바위의 최대거리] 값이 주어질 때,
그 상황에서 바위는 몇 개까지 둘 수 있는지를 세보는 함수(isOK로 명명)가 boolean 을 return 하도록 해본 점이다.
(직전에 풀었던 공유기에서는 거의 유사한 함수였지만 카운트한 int값을 반환해주었다.)
남겨두어야 하는 바위의 개수보다 적은 경우에는 False, 남겨두어야 하는 바위 이상인 경우에는 True를 주어서
본함수(?)에서 불리안 값을 참고해서 mid를 늘려도 될지, 아니면 mid를 더 줄여야 할지 판단하도록 했다.
1. 손정리
2. 코드
def solution(distance, rocks, n):
# rocks 를 오름차순으로 정렬
rocks.sort()
# 가장 인접한 바위 사이의 거리가 주어졌을 때, 남겨두어야 하는 바위의 개수 이상으로 남길 수 있는지 판단해주는 함수
def isOK(min_dis):
nonlocal n
nonlocal rocks
prev = 0
count = 0
for i in range(0, len(rocks)):
cur = rocks[i]
dis = cur - prev
if dis < min_dis:
continue
else:
count += 1
prev = cur
if count >= len(rocks) - n:
return True
else:
return False
# 가장 인접한 바위 간의 거리로 가능한 범위를 정해두고
# mid 조정해가는 이분탐색 진행
start = 1
end = distance
answer = 0
while start <= end:
mid = (start+end)//2
if isOK(mid) is True:
answer = max(answer, mid)
start = mid + 1
else:
end = mid - 1
return answer
'coding > 알고리즘,자료구조' 카테고리의 다른 글
이진탐색 연습 - 오름차순된 배열에서 특정 원소 개수 #bisect (0) | 2022.02.05 |
---|---|
이진탐색 연습 - 나무자르기(백준) (0) | 2022.02.05 |
이진탐색 연습 - 공유기 설치(백준) (0) | 2022.02.04 |
leetcode240. Search a 2D Matrix II - 이진탐색 연습 및 다른 풀이 (0) | 2022.02.04 |
stack 연습 - 후위표기식(postfix) 만들기 (0) | 2022.02.04 |
Comments