반응형
https://programmers.co.kr/learn/courses/30/lessons/64062
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

19년 12월 처음 접했을 때는 시간이 없어서 못 풀었고, 이번에 풀었을 때 효율성 13번에서 시간초과가 난 문제.
공식 풀이는 이분탐색.
나는 이 문제를 '전체 list 중 k개를 window로 돌면서, 해당 window의 최댓값이 가장 작은 것'을 반환하는 문제라고 봤다.
window로 돌 때, 해당 window 모든 값이 0이면 더 이상 강을 건널 수 없다.
모든 값이 0이 되려면, window의 가장 큰 값도 0이 되어야 하기 때문.
비슷한 알고리즘으로 푸신 듯한 다른 분의 C++코드.
[알고리즘] 카카오 개발자 겨울 인턴십 코딩 테스트 풀이
카카오 개발자 겨울 인턴십 코딩 테스트 문제 풀이 ( 크레인 인형 뽑기 게임, 튜플, 불량 사용자, 호텔 방배정, 징검다리 건너기)
velog.io
동일한 로직의 코드로 풀었을 때 실제 시험에서는 통과했고, 공개한 연습문제 테스트에서는 시간초과가 났다고 하는 걸 보니
13번 테스트 케이스의 기준이 올라갔나 보다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from collections import deque | |
def solution(stones, k): | |
window = deque(stones[:k]) | |
loc_max = max(window) | |
global_min = loc_max | |
for i in range(k, len(stones)): | |
leftpop = window.popleft() | |
rightappend = window.append(stones[i]) | |
if leftpop == loc_max: | |
loc_max = max(window) | |
global_min = min(global_min, loc_max) | |
return global_min | |

이분탐색으로 푼 코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def solution(stones, k): | |
_min, _max = 0, max(stones) | |
answer = 0 | |
while _min <= _max: | |
mid = (_min + _max) // 2 | |
arr = [] | |
zero_in_row = 0 | |
max_zeros = zero_in_row | |
for i in range(len(stones)): | |
if stones[i] >= mid: | |
arr.append(stones[i]) | |
elif stones[i] < mid: | |
arr.append(0) | |
if arr[i] == 0: | |
zero_in_row += 1 | |
elif arr[i] != 0: | |
max_zeros = max(max_zeros, zero_in_row) | |
zero_in_row = 0 | |
max_zeros = max(max_zeros, zero_in_row) | |
if max_zeros >= k: | |
_max = mid - 1 | |
else: | |
answer = mid | |
_min = mid + 1 | |
return answer | |

반응형
'프로그래밍 > 코딩테스트 문제풀이' 카테고리의 다른 글
[Python] 프로그래머스. 서울에서 경산까지 (Level 4) (0) | 2020.04.23 |
---|---|
[Python] 백준 17143. 낚시왕 (0) | 2020.04.10 |
[Python] 프로그래머스. 2020 카카오 recruit - 자물쇠와 열쇠 (Level 3) (0) | 2020.04.07 |
[Python] 프로그래머스. 2019 카카오 겨울 인턴 recruit - 불량 사용자 (Level 3) (0) | 2020.04.06 |
[Python] 프로그래머스. 2019 카카오 겨울 인턴 recruit - 튜플 (Level 2) (0) | 2020.04.03 |