////
Search

소스코드

import sys input = sys.stdin.readline N = int(input().strip()) tops = [(idx + 1, height) for idx, height in enumerate(map(int, input().strip().split()))] stack = [] result = [] for i in range(N): idx, height = tops[i] # 스택에 들어갈 값보다 작은 값들은 모두 제거 while stack and stack[-1][1] < height: stack.pop() if not stack: result.append(0) else: result.append(stack[-1][0]) stack.append((idx,height)) # 결과 출력 sys.stdout.write(' '.join(map(str, result)) + '\n')
Python
복사

풀이

선형탐색을 해야겠다는 생각을 했습니다(출력 순서가 그렇기 때문에)
input 데이터를 enumerate를 이용해서 약간 변환한 이유는 결과가 수신탑의 인덱스 + 1이기 때문입니다.
스택에 쌓아보는 식으로 그림을 그려봤는데, 스택이 맞다고 생각이 들어 더 풀어봤습니다.
인덱스 0부터 차례대로 스택에 append합니다.
스택에 있는 탑의 높이가 현재 선형탐색하며 들어갈 값보다 작은 경우엔 어차피 수신을 못하므로 다 빼버립니다.
만약 스택이 비어있다면, 수신할 탑이 없다는 뜻이므로 0을 결과 배열에 추가합니다.
스택에 값이 있다면, 해당 탑의 인덱스를 결과 배열에 추가합니다.
결과 배열을 ‘ ‘으로 join해서 출력합니다 → 끝!