반응형
해당 문제는 배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 찾는 문제다. 처음에는 이중 for문으로 문제를 풀게 되는데, 이 방식으로 접근하면 시간 초과가 발생한다.
def solution(numbers):
results = [-1] * len(numbers)
for idx in range(len(numbers)-1):
values = numbers[idx]
for j in numbers[idx+1:]:
if values < j:
results[idx] = j
break
return results
다른 풀이 방식은 Stack으로 문제를 푸는 것이다. stack은 먼저 -1로 된 빈 공간을 생성한다. 그런 다음, while문을 조건으로 달 수 있다. while 문 안에 코드를 해석하면, stack[-1]로 된 부분은 이전 idx, 즉, idx-1 번째 값인 number[stack[-1]]과 다음 idx값 즉, number[idx] 값을 비교하고, 만약에 이전 값보다 다음 값이 큰 경우에는 idx-1 번째 값에 numbers[idx]를 입력하는 형태로 구성된다.
def solution(numbers):
stack = []
answer = [-1] * len(numbers)
for idx in range(len(numbers)):
while stack and numbers[stack[-1]] < numbers[idx]:
answer[stack.pop()] = numbers[idx]
stack.append(idx)
return answer
'Python > Algorithm' 카테고리의 다른 글
[프로그래머스] 이모티콘 할인행사 - Python (0) | 2023.09.02 |
---|---|
[프로그래머스] 숫자 변환하기 - Python (0) | 2023.08.27 |
[프로그래머스] 주차 요금 계산 - Python (0) | 2023.08.25 |
[프로그래머스] 신고 결과 받기 - Python (4) | 2023.08.24 |
[프로그래머스] 크레인 인형뽑기 게임 - Python (0) | 2023.08.24 |