[백준] Python 17298번 오큰수

syeony·2024년 12월 7일
0

python

목록 보기
15/20


문제 바로가기: https://www.acmicpc.net/problem/17298

첫번째 풀이

# 시간초과

a = int(input())
b = list(map(int,input().split()))
c = []

for i in range(a-1):
    for j in range(i+1,a):
        if b[j]>b[i]:
            c.append(str(b[j]))
            break
    else:
        c.append('-1')

c.append('-1')

print(' '.join(c))

생각난대로 이중for문으로 풀었으나 어림도 없지 바로 시간초과^^
이거 말고도 filter와 next를 이용하여 구현해보았으나 시간초과...
결국 고민하다 다른 사람의 풀이를 봤다

두번째 풀이

import sys
input = sys.stdin.readline

a = int(input())
b = list(map(int,input().split()))
c = [-1] * a
stack = [0] # 스택을 사용하면 시간을 줄일 수 있다

for i in range(1,a):
    while stack and b[stack[-1]]<b[i]:
        c[stack.pop()] = b[i]
    stack.append(i)

print(*c) # 새롭게 알게된거

예시 설명

a = 4
b = [3, 5, 2, 7]
c = [-1, -1, -1, -1]

for i in range(1,a):
    while stack and b[stack[-1]]<b[i]:
        c[stack.pop()] = b[i]
    stack.append(i)

for문 <i = 1>

stack 있고 b[0]<b[1] 조건 만족 while문: c[0]=b[1] : stack.append(1)
stack = [1]
c = [5, -1, -1, -1]

for문 <i = 2>

stack 있으나 b[1]<b[2] 조건 안됨 (while문 건너뜀) : stack.append(2)
stack = [1, 2]
c = [5, -1, -1, -1]

for문 <i = 3>

stack 있고 b[2]<b[3] 조건 만족 while문: c[2]=b[3]
stack = [1]
c = [5, -1, 7, -1]
stack에 값이 아직 남아있으니 while문 계속
b[1]<b[3] 조건 만족 while문: c[1]=b[3] : stack.append(3)
c = [5, 7, 7, -1]

한줄평

개인적으로 stack...pop, while 저 동작원리 보고 이해하는데 좀 애먹었다ㅠㅠ

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글