반응형
https://school.programmers.co.kr/learn/courses/30/lessons/154539
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(numbers):
stack = []
result = [-1] * len(numbers)
for i in range(len(numbers)-1, -1, -1):
if stack == []:
stack.append(numbers[i])
continue
while stack:
s = stack.pop()
if s > numbers[i]:
result[i] = s
stack.append(s)
break
stack.append(numbers[i])
return result
먼저 빈리스트 stack
과 numbers
의 길이만큼 -1
을 저장하고 있는 리스트 result
를 초기화하였습니다.
result
의 인덱스(i
)로 접근하여 값을 바꾸어줄 것 입니다.
numbers
를 뒤에서부터 읽으면서 반복문을 진행합니다.
만약 stack
비어있다면 stack
에 numbers[i]
를 저장해주고 continue
키워드로 인하여 다음 반복으로 넘어갑니다.
stack
에 값이 들어있다면 while
문으로 stack
이 빌때까지 반복합니다.
먼저 stack.pop()
을 사용하여 stack
에 저장되어 있는 마지막값(s
)를 추출하고s
와 현재 탐색하고 있는 numbers[i]
와 비교하여 s
가 더 클 경우에는 result[i]
를 s
로 변경해주고 다시 stack
에 s
를 저장합니다. 그리고 break
문으로 while
문을 탈출합니다.
while문을 탈출하면 stack
에 numbers[i]
를 저장합니다.
- 여기서 저장해야 뒷 큰수를 확인할 수 있습니다.
result 리스트를 결과로 반환합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 2 x n 타일링 파이썬(Python) (0) | 2023.02.09 |
---|---|
[코딩테스트] 프로그래머스 베스트앨범 파이썬(Python) (0) | 2023.02.08 |
[코딩테스트] 프로그래머스 기능개발 파이썬(Python) (0) | 2023.02.06 |
[코딩테스트] 백준 촌수계산 파이썬(python) (0) | 2023.02.02 |
[코딩테스트] 프로그래머스 [1차] 다트 게임 파이썬(Python) (0) | 2023.02.01 |