[BaekJoon] 2493๋ฒ : ํ
Updated:
2493๋ฒ : ํ
๋ค์๊ณผ ๊ฐ์ด ํ์ฌ ํ์ ์ ํธ๋ฅผ ์ด๋ค ํ์ด ์์ ํ๋์ง ์์๋ด๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
์ ํธ๋ฅผ ๋ฐ์ ์ค ํ์ ์คํ์ผ๋ก ๊ด๋ฆฌํ๋ฉด ๋๋ค.
๋ง์ฝ ์ผ์ชฝ์ ์๋ ํ์ด ๋๋ณด๋ค ๋๋ค๋ฉด ๊ทธ ํ์ ์ ํธ๋ฅผ ๋ฐ์ ์ค ํ์ผ๋ก ์ ํ๋ฉด ๋๊ณ
์ผ์ชฝ์ ์๋ ํ์ด ๋๋ณด๋ค ๋ฎ๋ค๋ฉด ์ ํธ๋ฅผ ๋ฐ์ ์ค ํ์ ๋ณด๋ฉด์ ๋ด ์ ํธ๋ฅผ ๋ฐ์์ค ์ ์๋์ง ํ์ธํ๋ค.
๋ฐ์ ์ค ์ ์๋ค๋ฉด ์คํ์์ ๋นผ๋ฒ๋ฆฌ๊ณ ๊ณ์ ๋ฐ๋ณตํ๋ค.
๊ฐ์ฅ ํจ์จ์ด ์ข์ ์ฝ๋๋ฅผ ๋ณด๋ ์คํ์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๊ท๋ฅผ ํตํด ์ ํธ๋ฅผ ๋ฐ์ ์ค ํ์ ์ฐพ์๊ฐ๋ค.
์๋ฅผ๋ค์ด ๋ค ๋ฒ์งธ ํ์ ๊ฒฝ์ฐ ์ธ ๋ฒ์งธ ํ์ด ์ ํธ๋ฅผ ๋ฐ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ ์ธ ๋ฒ์งธ ํ์ ์ ํธ๋ฅผ ๋ฐ์์ฃผ๋ ํ์ผ๋ก ์ด๋ํ๋ค.
์ฌ๊ธฐ์ ์ด ํ์ด ๋ ์ ํธ๋ฅผ ๋ฐ์์ฃผ์ง ๋ชปํ๋ค๋ฉด ์ด ํ์ ์ ํธ๋ฅผ ๋ฐ์ ์ฃผ๋ ํ์ผ๋ก ๋ค์ ์ด๋ํ๋ค.
์ธ์์ ๋๋ํ ์ฌ๋๋ค์ด ์ ๋ง ๋ง์ ๊ฒ ๊ฐ๋ค..
import sys
def solution():
answer = [0]
receive_tower = []
for i in range(1, len(towers)):
if towers[i - 1] > towers[i]:
answer.append(i)
receive_tower.append([towers[i - 1], i])
else:
while receive_tower:
if receive_tower[-1][0] < towers[i]:
receive_tower.pop()
else:
answer.append(receive_tower[-1][1])
receive_tower.append([towers[i], i + 1])
break
if not receive_tower:
answer.append(0)
receive_tower.append([towers[i], i + 1])
print(*answer)
return
if __name__ == '__main__':
n = int(input())
towers = list(map(int, sys.stdin.readline().rsplit()))
solution()
Leave a comment