문제
크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.
예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.
입력
첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.
출력
총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.
예제 입력 1 복사
4
3 5 2 7
예제 출력 1 복사
5 7 7 -1
예제 입력 2 복사
4
9 5 4 8
예제 출력 2 복사
-1 8 8 -1
코드
# num리스트에 값을 입력받은 다음 stack리스트에 있는 비교하는데
# stack리스트안의 값보다 크면 오큰수이기 때문에
# stack리스트의 값을 result리스트에 넣어준다.
# 만약 크기가 작다면 stack리스트에 넣어준다.
# 이때 stack리스트에는 값이 아닌 값이 있는 리스트의 인덱스값을 넣어줘야된다.
# 왜냐하면 result값에 넣어줄때 몇번째에 있는 값인지를 알아야하기 때문이다.
n=int(input())
num=list(map(int,input().split()))
result=[-1]*n
stack=[]
for i in range(len(num)):
while(len(stack)!=0 and num[stack[-1]]<num[i]):
result[stack[-1]]=num[i]
stack.pop()
stack.append(i)
print(*result)
코드설명
느낀점
1. 리스트안에 인덱스값을 넣어 원하는 위치의 숫자를 사용하는 방식
2. print(*리스트)를 하면 띄어쓰기를 한채 출력
728x90
'Algorithm' 카테고리의 다른 글
백준 1918번 : 후위 표기식(python) (0) | 2021.11.22 |
---|---|
백준 1935번 : 후위표기식2 (python) (0) | 2021.11.21 |
백준 17299번 : 오등큰수 (python) (0) | 2021.11.19 |
백준 10799번 : 쇠막대기 (0) | 2021.11.18 |
백준 17413번 : 단어 뒤집기2(python) (0) | 2021.11.17 |