코테 백준 2493 골드5

김동윤·2023년 7월 21일
post-thumbnail

백준 2493

문제 자체에 대한 이해는 쉬웠으나 머리로는 그려지는데 이걸 논리적으로 프로그래밍을 할려고 하니 많이 힘들었다. 물론 코테가 이런거긴하지만 열심히 해서 몸에 익숙해져야겠다.

이문제를 풀면서 처음에는 스택으로 풀어야 한다는 생각을 못했고 스택으로 풀어야 한다는 힌트를 얻었음에도 입력 배열,결과 저장 배열, 임의의 배열 3개의 배열을 사용한다는 점이 나에게 많이 어려웠다. 그래서 다른분들의 풀이를 보면서 이해하고 꼭 복습을 해야겠다.

만약 스택에 아무것도 없다면은 자기보다 길이가 큰 탑이 없다는 뜻이므로 answer에 0을 append한다.

stack이 빌때까지 반복문을 돌면서 스택에 가장 마지막이란것은 현재 진행하는것까지 가장 높이가 큰 탑이므로 현재 탑의 길이가 이것보다 크다면 stack을 pop해주어 가장 높이가 큰 탑을 삽입해준다. 하지만 작다면 stack의 마지막인 높은 탑에 부딪힐거기때문에 answer에 stack[-1][0]+1을 append해준다. 1을 더해준 이유는 우리는 인덱스를 0부터 실행하지만 문제에서 제일 첫번째를 1로 기준을 두었기때문이다.

import sys
input=sys.stdin.readline

n=int(input())
top=list(map(int,input().split()))

stack=[]
answer=[]

for i in range(n):
    while stack:
        if stack[-1][1]<top[i]:
            stack.pop()
        else:
            answer.append(stack[-1][0]+1)
            break
    if not stack:
        answer.append(0)
    stack.append([i,top[i]])

print(*answer)
profile
Back-End

0개의 댓글