일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 리눅스
- 부주상골증후군
- ChatGPT
- 세브란스
- DFS
- dp
- IOS
- 코테
- 부주상골수술후기
- 독학
- sql
- 카카오인턴
- 부주상골수술
- 독일어독학
- istringstream
- 카카오인턴십
- 분할정복
- 구현
- BFS
- 스택
- 독일어
- SQLD
- 롯데정보통신
- 부주상골
- 코딩테스트
- SWIFT
- 프로그래머스
- 카카오코테
- c++
- 백준
Archives
- Today
- Total
슈뢰딩거의 고등어
[2019 카카오 개발자 겨울 인턴십] 징검다리 건너기 (LV3) 본문
https://programmers.co.kr/learn/courses/30/lessons/64062
이분탐색은 많이 풀어봐야 감을 잡을 것 같담
[풀이]
1. 최대로 이동가능한 사람 인원을 찾는다
- 가장 많은 횟수로 디딜수 있는 디딤돌의 수가 된다.
2. 중간값 N을 구한다.
- 이 의미는, N 번째의 사람이 넘어갈때를 확인하는 것이 된다.
3. stone-mid 가 0 이하인지 확인한다.
- stone-mid 는 N 번째 사람이 넘어갈때의 stone 상태값이 된다.
3-1. 0 이 된다면 패스해야하므로 cnt++ 해준다.
4. cnt가 k 이상이 되는지 확인한다.
4-1. 이상이라면, N번째 사람은 넘어갈 수 없는 것이므로 min_p ~ N-1 의 사람으로 다시 탐색한다.
4-2. 이하라면, N번째 사람은 통과한다는 것이므로 answer 에 N을 세팅해주고, N+1 ~ max_p 로 다시 탐색한다.
[코드]
def solution(stones, k):
answer = 0
min_p = 1
max_p = max(stones)
while min_p <= max_p:
mid = (min_p + max_p) // 2
cnt =0
for stone in stones:
if stone - mid <= 0:
cnt += 1
else:
cnt = 0
if cnt >= k:
break
if(cnt < k):
min_p = mid+1
else:
answer = mid
max_p = mid-1
return answer
[정확성 통과/ 효율성 불통]
def solution(stones, k):
answer = 0
while True:
cnt = 0
for i in range(len(stones)):
if(stones[i]>0):
cnt = 0
stones[i]-=1
else:
cnt = cnt+1
if cnt == k:
return answer
answer+= 1
return answer
'알고리즘' 카테고리의 다른 글
[2017 카카오코드예선] 보행자 천국 (LV3) (0) | 2022.04.25 |
---|---|
[2021 카카오 채용형 인턴십] 숫자문자열과 영단어 (LV1) (0) | 2022.04.23 |
[2019 카카오 개발자 겨울 인턴십] 불량 사용자 (lv3) (0) | 2022.04.17 |
[2019 카카오 개발자 겨울 인턴십] 튜플 (0) | 2022.04.17 |
[프로그래머스] 베스트 앨범 (c++) (0) | 2022.04.16 |
Comments