반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/154539
🐍파이썬
더보기
❌ 실패 코드
def solution(numbers):
answer = []
for i in range(len(numbers)):
for j in range(i+1, len(numbers)):
if numbers[i] < numbers[j]:
answer.append(numbers[j])
break
else:
answer.append(-1)
return answer
이중 for문 사용
만약 numbers의 원소갯수가 1,000,000개이고 큰뒷수가 리스트의 끝에 존재한다면 999,999개를 비교해야 하므로 시간초과가 발생한다.
def solution(numbers):
answer = [-1 for _ in range(len(numbers))]
stack = []
for idx, num in enumerate(numbers):
#스택에 원소가 남아있고 새로운 수가 스택상단의 수보다 크다면
while stack and num > numbers[stack[-1]]:
#answer 배열의 스택상단 idx 값에 큰 수 num 삽입
answer[stack.pop()] = num
#매번 stack에 새로운 수의 idx를 삽입
stack.append(idx)
return answer
💡 코드 설명
새로운 수(num)이 들어오면 numbers[스택 최상단 idx]값과 비교한다.
더 이상 새로운 수보다 작은 수가 없을 때까지 스택을 pop하고,
arr[pop한 스택 idx]에 새로운 수를 대입한다.
처음에 arr값을 모두 -1로 초기화했기 때문에 뒷 큰수를 찾지 못한 경우 -1 값이 그대로 유지된다.
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[프로그래머스|파이썬] 바탕화면 정리 (연습문제/lv.1) (0) | 2023.05.23 |
---|---|
[프로그래머스|파이썬] [3차] n진수 게임 (2018 KAKAO BLIND RECRUITMENT/lv.2) (0) | 2023.05.22 |
[프로그래머스|파이썬] k진수에서 소수 개수 구하기 (2022 KAKAO BLIND RECRUITMENT/lv.2) (0) | 2023.05.22 |
[프로그래머스|파이썬] 베스트앨범 (해시/level 3) (0) | 2023.04.29 |
[프로그래머스|파이썬] 공원 산책 (연습문제/level 1) (0) | 2023.04.28 |
[프로그래머스|파이썬] 달리기 경주 (연습문제/level 1) (0) | 2023.04.27 |