반응형
풀이
- 탑의 높이가 주어지고 , 왼쪽의 탑부터 왼쪽으로 레이저를 쏘아 그 레이저를 맞는 탑의 번호를 모두 구하는 문제다.
- 이 문제 역시 스택을 이용하면 편하다.
- 비슷한 문제로는 17298번 : 오큰수 가 있다.
알고리즘 - Python / 백준 - 17298번 : 오큰수 (tistory.com)
- 푸는 방법 역시 비슷하다.
- 탑의 높이 리스트를 역순으로 읽으며 다음 과정을 반복한다.
- 1. 다음 탑이 스택의 TOP 보다 높거나 같다면 , POP하고 그 탑의 레이저가 송신한 탑 (다음 탑)을 기록한다.
- 2. 만약 스택의 TOP 보다 작다면 , 스택의 맨 위에 그 탑을 추가하고 while 문을 break 한다.
- 1번 과정은 stack이 빌 때 까지 진행한다.
- 스택을 활용하는 방식이 오큰수 문제와 상당히 유사하고 흡사한 문제다.
import sys
n = int(sys.stdin.readline())
s = list(map(int , sys.stdin.readline().split(" ")))
stack = [[s[-1],n-1]]
ans = [0 for i in range(n)]
for i in range(len(s)-2,-1,-1):
check = True
while stack:
if stack[-1][0] <= s[i]:
pp = stack.pop(-1)
ans[pp[1]] = i + 1
else:
stack.append([s[i],i])
check = False
break
if check:
stack.append([s[i], i])
for i in range(0,len(ans)-1):
print(ans[i],end=" ")
print(ans[len(ans)-1])
반응형