ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ข์ธก์ ์๋ ํ์ด, ์ฐ์ธก์ ํ ๋ณด๋ค ๋์ด๊ฐ ๋์ ๊ฒฝ์ฐ์ ์ ํธ๋ฅผ ์์ ํ ์ ์๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฒ์์๋ ์ ๋ ฅ์ ๋ฆฌ์คํธ๋ก ๋ฐ๊ณ ๋ค์ง์ด์ ์๊ฐํด์ผ ํ ๊น ๊ณ ๋ฏผํ๋ค. ํ์ง๋ง, ๊ฐ ํ์ ์ธ๋ฑ์ค, ๋์ด๋ฅผ `stack`์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ํด๊ฒฐํ ์ ์๋ค.
- `stack`์ ํ์ ์์๋๋ก ์ฝ์
ํ๋ค.
- pop์ ํ๊ฒ ๋๋ฉด, ํ์ฌ ํ์ ๊ธฐ์ค์ผ๋ก ๋ฐ๋ก ์ข์ธก์ ํ๋ถํฐ ๋น๊ต๋ฅผ ์์ ํ ์ ์๋ค.
- ํ์ฌ ํ์์ ๋น๊ตํ์ฌ `stack`์์ ํ์๋ค(์ข์ธก์ ํ์๋ค)๊ณผ ๋น๊ตํ์ฌ, ๋์ด๊ฐ ๋ฎ๋ค๋ฉด ์ ๊ฑฐํ๋ค.
- ํ์ฌ ํ์๋ณด๋ค ๋์ด๊ฐ ๋ฎ๋ค๋ฉด ํ์ ์๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๋ฐ๋ณตํ๋ฉด, ์ํ๋ ๋ต์ ์ฐพ์ ์ ์๋ค.
์ฝ๋
from sys import stdin
IDX, HEIGHT = 0, 1
if __name__ == "__main__":
N = int(stdin.readline())
tower = list(map(int, stdin.readline().split()))
stack = []
answer = [0 for _ in range(N)]
for idx, height in enumerate(tower):
while stack:
if stack[-1][HEIGHT] > height:
answer[idx] = stack[-1][IDX] + 1
break
else:
stack.pop()
stack.append((idx, height))
print(' '.join(map(str, answer)))
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 2504 ๊ดํธ์ ๊ฐ (0) | 2021.03.12 |
---|---|
๋ฐฑ์ค: 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (0) | 2021.03.10 |
๋ฐฑ์ค: 1966 ํ๋ฆฐํฐ (0) | 2021.03.09 |
๋ฐฑ์ค: 10422 ๊ดํธ (0) | 2020.11.09 |
๋ฐฑ์ค: 14426 ์ ๋์ฌ ์ฐพ๊ธฐ (0) | 2020.10.27 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ