코딩테스트 연습 - 뒤에 있는 큰 수 찾기 | 프로그래머스 스쿨 (programmers.co.kr)
나의 풀이
def solution(numbers):
result=[]
for i in range(len(numbers)):
for j in numbers[i:]:
if numbers[i]<j:
result.append(j)
break
elif max(numbers[i:])==numbers[i]:
result.append(-1)
break
return result
이중 for문 사용으로 시간 초과되어 실패하였다.
모범 답안
def solution(numbers):
stack=[]
result=[-1]*len(numbers)
for i in range(len(numbers)):
while stack and numbers[stack[-1]]<numbers[i]:
result[stack.pop()]=numbers[i]
stack.append(i)
return result
stack을 이용해 인덱스 값을 담아 stack[-1]과 numbers[i]의 값을 비교해 문제를 풀 수 있다.
이렇게 하면 이중 for문을 사용하지 않아도 numbers의 값들을 비교 가능하다.
'코딩테스트 > programmers (python)' 카테고리의 다른 글
Programmers / 2단계 / [3차] 압축 / python / 2018 KAKAO BLIND RECRUITMENT (0) | 2024.02.23 |
---|---|
Programmers / 2단계 / 땅따먹기 / python (0) | 2024.02.21 |
Programmers / 2단계 / [스택/큐] 주식가격 / python (0) | 2024.02.20 |
Programmers / 3단계 / [DFS/BFS] 네트워크 / python (0) | 2024.02.19 |
Programmers / 2단계 / [힙(Heap)] 더 맵게 / python / (1) | 2024.02.18 |