반응형
17298번: 오큰수
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
www.acmicpc.net
코드
n = int(input())
a_list = list(map(int,input().split()))
a_list.reverse()
stack = [a_list[0]]
ans = [-1]
for i in range(1,n):
flag = 0
while stack:
if stack[-1] > a_list[i]:
ans.append(stack[-1])
stack.append(a_list[i])
flag = 1
break
else:
stack.pop()
if flag == 0:
stack.append(a_list[i])
ans.append(-1)
ans.reverse()
print(*ans)
설명
우선 주어진 a_list를 reverse를 이용하여 순서를 뒤집어준다.
가장 마지막 숫자 (뒤집어줬으니까 이제는 첫번째 숫자)는 항상 -1의 값을 갖기 때문에 ans에 미리 -1을 넣어두고 stack에 a_list[0]을 넣어놓는다.
stack의 가장 위에 있는 숫자가 가장 왼쪽에 있는 숫자이기 때문에 가장 위에 있는 숫자부터 while문을 이용하여 숫자가 존재하지 않을 때까지 비교를 해준다.
만약 a_list[i]의 값이 stack[-1]의 값보다 크면 조건을 만족하지 않기 때문에 stack.pop()을 통해 값을 pop 시켜주고 해당 작업을 반복한다.
a_list[i] < stack[-1]의 조건을 만족한다면 ans에 stack[-1]을 추가하고 stack에 a_list[i]를 추가한 후 while문을 빠져나간다.
stack이 빌 때까지 조건을 만족하지 못했다면 ans에 -1을 추가해준다.
ans를 다시 뒤집어주고 출력을 한다.
반응형
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준][Python] 17219번 비밀번호 찾기 (0) | 2023.01.10 |
---|---|
[백준][Python] 1269번 대칭 차집합 (0) | 2023.01.09 |
[백준][Python] 1655번 가운데를 말해요 (0) | 2023.01.05 |
[백준][Python] 10815번 숫자 카드 (0) | 2023.01.04 |
[백준][Python] 23757번 아이들과 선물 상자 (0) | 2022.12.21 |
댓글