ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ํ์ด
3 5 2 7์ ์์ด์ด ์ฃผ์ด์ง๋ฉด, ํ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ ํฐ ๊ฐ์ด ์์ผ๋ฉด ์ต์ด์ ํฐ ๊ฐ์ ๊ธฐ๋กํ์ฌ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ง์ฝ ํฐ ๊ฐ์ ์ฐพ์ ์ ์๋ค๋ฉด -1์ ๋ฐํํ๋ค. ์ด ๋ฌธ์ ๋ ๋ค๋ฅธ stack์ ๋ฌธ์ ์ ๋ฌ๋ฆฌ ์์ด์ ๊ฐ์ stack์ ๋ฃ๋ ๊ฒ์ด ์๋, ๊ฐ ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค. ๋ํ, ํ์ด์ฌ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ ๊ฐ ์ฒ๋ฆฌ๋ง๋ค list๋ฅผ append ํ ๊ฒฝ์ฐ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฏ๋ก, ๋ฏธ๋ฆฌ list๋ฅผ ์ด๊ธฐํํด๋๊ณ ์งํํ์ฌ์ผ ํ๋ค.๐
- stack์ ์ธ๋ฑ์ค 0๋ฒ๋ถํฐ ์ถ๊ฐํ์ฌ, ์ฐ์ ๋ฐ๋ก ์ ์์์ ๋น๊ตํ๋ค.
- 1์ ๊ณผ์ ์ stack์ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์์๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
- 2์ ๊ณผ์ ์ด ๋๋๋ฉด ๋ค์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
1 - 3์ ๊ณผ์ ์ 3 5 2 7๊ณผ ๊ฐ์ ์์๊ฐ ์ ๋ ฅ๋ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์งํํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์งํ๋๋ค.
- 0๋ฒ ์ธ๋ฑ์ค๋ฅผ stack์ ๋ฃ๊ณ ๋ค์ ์ธ๋ฑ์ค์ธ 1๊ณผ ๋น๊ตํ๋ ๊ฐ์ด ํฌ๋ฏ๋ก ์ธ๋ฑ์ค 0์ ๊ฐ์ 5๋ก ๊ฐฑ์ ํ๊ณ ์ธ๋ฑ์ค 0์ stack์์ pop ํ๋ค.
- 1๋ฒ ์ธ๋ฑ์ค๋ฅผ stack์ ๋ฃ๊ณ ๋ค์ ์ธ๋ฑ์ค์ธ 2์ ๋น๊ตํ๋ ๊ฐ์ด ํฌ์ง ์์ผ๋ฏ๋ก ๊ฐฑ์ ํ์ง ์๋๋ค.
-
2๋ฒ ์ธ๋ฑ์ค๋ฅผ stack์ ๋ฃ๊ณ ๋ค์ ์ธ๋ฑ์ค์ธ 3๊ณผ ๋น๊ตํ๋ ๊ฐ์ด ํฌ๋ฏ๋ก ์ธ๋ฑ์ค 2์ ๊ฐ์ 7๋ก ๊ฐฑ์ ํ๊ณ ์ธ๋ฑ์ค 2๋ฅผ stack์์ pop ํ๋ค.
- ์์ง stack์ 1๋ฒ ์ธ๋ฑ์ค๊ฐ ์์ผ๋ ์ธ๋ฑ์ค 1๊ณผ ๋ค์ ์ธ๋ฑ์ค์ธ 3์ ๋น๊ตํ๋ ๊ฐ์ด ํฌ๋ฏ๋ก ์ธ๋ฑ์ค 1์ ๊ฐ์ 7๋ก ๊ฐฑ์ ํ๊ณ ์ธ๋ฑ์ค 1์ stack์์ pop ํ๋ค.
- ๊ฐ์ฅ ๋ง์ง๋ง์ธ 3๋ฒ ์ธ๋ฑ์ค๋ ํ์ธํ ํ์๊ฐ ์๋ค.
์ฝ๋
from sys import stdin
if __name__ == '__main__':
n = int(stdin.readline())
nums = list(map(int, stdin.readline().split()))
stack = [0]
answer = [-1] * n
i = 1
while i < n:
while stack and nums[stack[-1]] < nums[i]:
answer[stack[-1]] = nums[i]
stack.pop()
stack.append(i)
i += 1
for num in answer:
print(num, end=' ')
๋ฌธ์ ํ์ด์์ ์๊ฐํ ํ์ด ๋ฐฉ๋ฒ์ ๊ทธ๋๋ก ์ฝ๋๋ก ์์ฑํ ๊ฒ์ด๋ค. answer๋ฅผ ๋ฏธ๋ฆฌ -1๋ก ์ด๊ธฐํํด๋์ด ๋ณ๊ฒฝ์ด ์์ ๊ฒฝ์ฐ ์ฒ๋ฆฌํ ํ์ ์์ด ์งํํ๋ฉด ๋๋ค. ์์๋ฅผ ํ์ํ๋ฉด์ stack์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ฐ์ด ์ฒ๋ฆฌํด์ผ ํ๋ค. (์ฑ์ ์ ์๊ฐ์ด ์๋นํ ์์๋๋ค.)
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 10799 ์ ๋ง๋๊ธฐ (0) | 2020.06.23 |
---|---|
๋ฐฑ์ค: 17413 ๋จ์ด ๋ค์ง๊ธฐ 2 (0) | 2020.06.23 |
๋ฐฑ์ค: 17299 ์ค๋ฑํฐ์ (0) | 2020.06.23 |
๋ฐฑ์ค: 1158 ์์ธํธ์ค ๋ฌธ์ (0) | 2020.06.22 |
๋ฐฑ์ค: 1874 ์คํ ์์ด (0) | 2020.06.22 |