백준 2493 탑

강아람·2022년 8월 17일
0

백준

목록 보기
4/4

💻 코드 1

import sys

nlist = []
result = [0]

N = int(input())
maxidx = 0

nlist = list(map(int, sys.stdin.readline().split()))

for i in range(1, N):
    if nlist[maxidx] < nlist[i]:    # 제일 높은 탑보다 낮으면 0
        result.append(0)
        continue

    idx = i - 1 # 비교 시작
    while nlist[idx] < nlist[i] and idx >= maxidx:    # 왼쪽 탑보다 작으면 반복
        idx -= 1
    result.append(idx + 1)
    if nlist[idx] >= nlist[maxidx]:
        maxidx = idx

print(*result, sep=' ')

❌ 결과


스택을 이용해서 코드를 작성하려 했지만 너무 어려웠다.




💻 코드 2

출처 : https://www.acmicpc.net/board/view/70952

import sys

n = int(input())
nlist = list(map(int, sys.stdin.readline().split()))
answer = [0 for _ in range(n)]
stack = [] # 이전 숫자 스택

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

print(*answer)

⭕ 결과


자료구조에 대한 이해가 아직 부족하다고 느껴졌다. 내일부터 CS 스터디 열심히 해야지! 😋

0개의 댓글