๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Problem Solving/BAEKJOON

[baekjoon]python #17298 ์˜คํฐ์ˆ˜

by DevIseo 2022. 8. 31.

[baekjoon]python #17298 ์˜คํฐ์ˆ˜

https://www.acmicpc.net/problem/17298

 

17298๋ฒˆ: ์˜คํฐ์ˆ˜

์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 โ‰ค N โ‰ค 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์— ์ˆ˜์—ด A์˜ ์›์†Œ A1, A2, ..., AN (1 โ‰ค Ai โ‰ค 1,000,000)์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

๐Ÿ˜ซ์‹œ๊ฐ„์ดˆ๊ณผ

N = int(input())
arr = list(map(int,input().split()))

result = []

for i in range(N):
    Max_V = -float('inf')
    for j in range(i+1,N):
        if arr[i] < arr[j]:
            Max_V=max(Max_V,arr[j])
            break
        else:
            Max_V=-1
    if i == N-1:
        Max_V=-1
    result.append(Max_V)

print(*result)

์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ์˜ˆ์ œ ๋‹ต์€ ์ž˜ ๋‚˜์˜ค์ง€๋งŒ O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ผ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค...

 

 

๐Ÿ˜€๋ฌธ์ œ ํ•ด๊ฒฐ

N = int(input())
arr = list(map(int,input().split()))
answer = [-1]*N
stack=[]

for i in range(N):
    while stack and (stack[-1][0] < arr[i]):
        temp,idx = stack.pop()
        answer[idx]=arr[i]
    stack.append([arr[i],i])
print(*answer)

์ด ํ’€์ด๋„ O(n^2)๋ฅผ ๊ฐ–๋Š” ์ฝ”๋“œ์ด์ง€๋งŒ ์ฒซ๋ฒˆ์งธ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‹ค ๋น„๊ตํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๊นŒ์ง€๋งŒ ๋น„๊ตํ•ด์„œ ํ†ต๊ณผ๊ฐ€ ๋œ ๊ฑฐ ๊ฐ™๋‹ค. 

 

๐Ÿ˜ฎ๋‹ค๋ฅธ ์‚ฌ๋žŒ ์ฝ”๋“œ

import sys
input = sys.stdin.readline

n = int(input())
seq = list(map(int,input().split()))
stack = []

for i in range(n):
    while(stack):
        if seq[i] > seq[stack[-1]]:
            seq[stack.pop()] = seq[i]
        else:
            stack.append(i)
            break
    
    if not stack:
        stack.append(i)
for i in stack:
    seq[i] = -1
    
print(*seq)

๋Œ“๊ธ€