[BaekJoon] 17298번 : 였큰수

Updated:

17298번 : 였큰수


[BaekJoon] 2493번 : 탑 λ¬Έμ œμ™€ 같은 μœ ν˜•μ˜ λ¬Έμ œμ΄λ‹€. 탑은 μ™Όν°μˆ˜ λŠλ‚Œ..

말 κ·ΈλŒ€λ‘œ 였λ₯Έμͺ½μ— μžˆμœΌλ©΄μ„œ λ‚˜λ³΄λ‹€ 큰 수 μ€‘μ—μ„œ κ°€μž₯ μ™Όμͺ½μ— μžˆλŠ” 수λ₯Ό 찾으면 O(N^2) λ˜μ–΄λ²„λ € μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•œλ‹€.

μŠ€νƒμ„ μ‚¬μš©ν•˜λ©΄ λ˜λŠ”λ° μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό κ°™λ‹€.

주어진 μˆ˜μ—΄μ„ μ—­λ°©ν–₯으둜 λŒλ©΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

  1. 큰 수 μŠ€νƒμ˜ top 보닀 λ‚΄κ°€ ν¬κ±°λ‚˜ κ°™μœΌλ©΄ 큰 수 μŠ€νƒμ˜ top 이 λ‚˜λ³΄λ‹€ 큰 μˆ˜κ°€ λ‚˜μ˜¬ λ•Œ κΉŒμ§€ pop ν•œλ‹€.
  2. 큰 수 μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 닡에 -1 을 λ„£κ³  큰 수 μŠ€νƒμ— λ‚˜λ₯Ό λ„£λŠ”λ‹€.
  3. 큰 수 μŠ€νƒμ΄ λΉ„μ–΄μžˆμ§€ μ•Šλ‹€λ©΄ 큰 수 μŠ€νƒμ˜ top 을 닡에 λ„£κ³  λ‚˜λ₯Ό 큰 수 μŠ€νƒμ— λ„£λŠ”λ‹€.

κΈ€λ‘œ λ˜μ–΄μžˆμ–΄ 이해가 잘 μ•ˆκ°ˆ 수 μžˆμ§€λ§Œ μ†μœΌλ‘œ κ·Έλ €μ„œ 직접 해보면 μ‰½κ²Œ μ•Œ 수 μžˆλ‹€.


import sys


def solution():
	answer = []
	max_num = []

	for num in reversed(arr):
		while max_num and max_num[-1] <= num:
			max_num.pop()

		if max_num:
			answer.append(max_num[-1])
			max_num.append(num)

		if not max_num:
			answer.append(-1)
			max_num.append(num)

	return list(reversed(answer))


if __name__ == '__main__':
	n = int(input())
	arr = list(map(int, sys.stdin.readline().rsplit()))

	print(*solution())



Categories:

Updated:

Leave a comment