

풀이 과정
처음에는 A 리스트에서 A[i+1] < A[N] 일 때를 발견한 후 flag 로 표시한 후 답 리스트에 추가해줘야겠다고 생각했다. 그러면 전체 for 문과 i 일 때의 for 문 두 개로 나뉘므로 시간 초과로 고생하는 (동방에 있던 사람 피셜...) 문제라 분명 오답일 것 같았다. 수열 배열을 생각하다가 옛날에 카운팅 정렬에 대해 알아보았던 게 기억났다.

result[stack.pop()] = A[i] 대신 result.append(A[i]) 를 했다가 혼쭐났다. 바본가 result.append 는 result 맨 끝에 수를 추가하는 것이다. stack 에 저장한 해당 index 의 오큰수를 result 같은 index 에 저장해야 하기 때문에 result[stack.pop()] = A[i] 를 사용해서 추가해줘야 한다.
import sys
input = sys.stdin.readline
n = int(input())
A = list(map(int, input().split()))
result = [-1] * n
stack = []
stack.append(0)
for i in range(1, n):
while stack and A[stack[-1]] < A[i]:
result[stack.pop()] = A[i]
stack.append(i)
print(*result)
'Algorithm 뽀개기' 카테고리의 다른 글
[백준] 11655 ROT13 (Python) 출력 형식이 잘못되었습니다 (0) | 2024.07.04 |
---|---|
[백준] 10820 문자열 분석 (Python) (1) | 2024.07.03 |
[백준] 1874 스택 수열 (Python) (0) | 2024.06.28 |
[Programmers] Lv.2 다음 큰 숫자 (JavaScript) (3) | 2024.05.03 |
[Programmers] Lv.1 시저 암호 (JavaScript) (0) | 2024.05.03 |


풀이 과정
처음에는 A 리스트에서 A[i+1] < A[N] 일 때를 발견한 후 flag 로 표시한 후 답 리스트에 추가해줘야겠다고 생각했다. 그러면 전체 for 문과 i 일 때의 for 문 두 개로 나뉘므로 시간 초과로 고생하는 (동방에 있던 사람 피셜...) 문제라 분명 오답일 것 같았다. 수열 배열을 생각하다가 옛날에 카운팅 정렬에 대해 알아보았던 게 기억났다.

result[stack.pop()] = A[i] 대신 result.append(A[i]) 를 했다가 혼쭐났다. 바본가 result.append 는 result 맨 끝에 수를 추가하는 것이다. stack 에 저장한 해당 index 의 오큰수를 result 같은 index 에 저장해야 하기 때문에 result[stack.pop()] = A[i] 를 사용해서 추가해줘야 한다.
import sys
input = sys.stdin.readline
n = int(input())
A = list(map(int, input().split()))
result = [-1] * n
stack = []
stack.append(0)
for i in range(1, n):
while stack and A[stack[-1]] < A[i]:
result[stack.pop()] = A[i]
stack.append(i)
print(*result)
'Algorithm 뽀개기' 카테고리의 다른 글
[백준] 11655 ROT13 (Python) 출력 형식이 잘못되었습니다 (0) | 2024.07.04 |
---|---|
[백준] 10820 문자열 분석 (Python) (1) | 2024.07.03 |
[백준] 1874 스택 수열 (Python) (0) | 2024.06.28 |
[Programmers] Lv.2 다음 큰 숫자 (JavaScript) (3) | 2024.05.03 |
[Programmers] Lv.1 시저 암호 (JavaScript) (0) | 2024.05.03 |