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
- 격파르타 장점
- candies
- 프로그래머스
- 피보나치 함수
- Special String Again
- 해커랭크
- 격파르타 후기
- Max Array Sum
- 구슬탈출2
- Reverse Shuffle Merge
- 백준
- 매칭점수
- Common Child
- DFS: Connected Cell in a Grid
- Algorithm
- [sqld]자격증합격
- Interview Preparation Kit
- python
- BFS: Shortest Reach in a Graph
- hackerrank
- 야근지수
- Find the nearest clone
- programmers
- Recursion: Davis' Staircase
- 파이썬
- 머신러닝
- 코딩테스트
- Roads and Libraries
- 격파르타 합격후기
- 알고리즘
Archives
- Today
- Total
Archive
[programmers] Level4. 징검다리 본문
풀이
-
바위 사이의 거리를 이분탐색으로 찾는 문제
-
변수의 의미 파악이 중요함.
-
left, right의 평균 distance를 구함 -> 결과를 보고 distance +1 이나 distance - 1을 left 혹은 right에 할당함 -> search 영역이 반으로 줄어듬.
def solution(distance, rocks, n): answer = 0 rocks.sort() rocks.append(distance) left, right = 0, distance while left <= right: prev_rock = 0 rock_count = 0 # 바위 사이의 거리를 distance 변수에 저장 # 처음에는 전체 길이의 반으로 시작함. # 바위 사이의 거리가 distance보다 작음 -> 제거할 바위 개수로 count함 distance = (left + right)//2 for current_rock in rocks: # 이전 바위 + distance 안에 현재 바위가 있으면 count 증가 if current_rock < prev_rock + distance: rock_count += 1 # 이전 바위 위치를 현재 바위 위치로 업데이트 else: prev_rock = current_rock # 너무 많은 바위가 distance 안에 있음 -> distance 값 낮추기 위해 right 감소 # right에 distance - 1해줌으로써 search 영역이 반으로 줄어듬. if rock_count > n: right = distance - 1 # 이번에는 distance가 짧기 때문에 left를 1 증가 # left에 distance + 1 해줌으로써 search 영역이 반으로 줄어듬. else: left = distance + 1 answer = distance return answer
'공부 > Algorithm' 카테고리의 다른 글
[Hackerrank] Triple sum (0) | 2020.08.10 |
---|---|
[Hackerrank] Hash Tables: Ice Cream Parlor (0) | 2020.08.10 |
[programmers] Level4. 가사검색 (0) | 2020.08.06 |
[programmers] Level4. 지형이동 (0) | 2020.08.05 |
[programmers] Level3. 종이접기 (0) | 2020.07.29 |
Comments