-
[Python] ๋ฐฑ์ค 2841 ์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ (Stack)๐ป Algorithm/Python 2022. 7. 2. 15:13
๐ ๋ฌธ์
์๊ทผ์ด์ ์์์ ์น๊ตฌ ์ธ๊ณ์ธ์ ์๊ฐ๋ฝ์ ์์ญ์ต๊ฐ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ๋ ์ธ๊ณ์ธ์ ๊ธฐํ๊ฐ ์น๊ณ ์ถ์๊ณ , ์ธํฐ๋ท์์ ๊ฐ๋จํ ๋ฉ๋ก๋๋ฅผ ๊ฒ์ํ๋ค. ์ด์ ์ด ๊ธฐํ๋ฅผ ์น๋ ค๊ณ ํ๋ค.
๋ณดํต ๊ธฐํ๋ 1๋ฒ ์ค๋ถํฐ 6๋ฒ ์ค๊น์ง ์ด 6๊ฐ์ ์ค์ด ์๊ณ , ๊ฐ ์ค์ P๊ฐ์ ํ๋ ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ํ๋ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ P๋ฒ๊น์ง ๋๋์ด์ ธ ์๋ค.
๋ฉ๋ก๋๋ ์์ ์ฐ์์ด๊ณ , ๊ฐ ์์ ์ค์์ ํด๋นํ๋ ํ๋ ์ ๋๋ฅด๊ณ ์ค์ ํ๊ธฐ๋ฉด ์ฐ์ฃผํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด, 4๋ฒ ์ค์ 8๋ฒ ํ๋ ์ ๋๋ฅด๊ณ ํ๊ธธ ์ ์๋ค. ๋ง์ฝ, ์ด๋ค ์ค์ ํ๋ ์ ์ฌ๋ฌ ๊ฐ ๋๋ฅด๊ณ ์๋ค๋ฉด, ๊ฐ์ฅ ๋์ ํ๋ ์ ์์ด ๋ฐ์ํ๋ค.
์๋ฅผ ๋ค์ด, 3๋ฒ ์ค์ 5๋ฒ ํ๋ ์ ์ด๋ฏธ ๋๋ฅด๊ณ ์๋ค๊ณ ํ์. ์ด๋, 7๋ฒ ํ๋ ์ ๋๋ฅธ ์์ ์ฐ์ฃผํ๋ ค๋ฉด, 5๋ฒ ํ๋ ์ ๋๋ฅด๋ ์์ ๋ผ์ง ์๊ณ ๋ค๋ฅธ ์๊ฐ๋ฝ์ผ๋ก 7๋ฒ ํ๋ ์ ๋๋ฅด๊ณ ์ค์ ํ๊ธฐ๋ฉด ๋๋ค. ์ฌ๊ธฐ์ 2๋ฒ ํ๋ ์ ์์ ์ฐ์ฃผํ๋ ค๊ณ ํ๋ค๋ฉด, 5๋ฒ๊ณผ 7๋ฒ์ ๋๋ฅด๋ ์๊ฐ๋ฝ์ ๋ ๋ค์์ 2๋ฒ ํ๋ ์ ๋๋ฅด๊ณ ์ฐ์ฃผํด์ผ ํ๋ค.
์ด๋ ๊ฒ ์๊ฐ๋ฝ์ผ๋ก ํ๋ ์ ํ ๋ฒ ๋๋ฅด๊ฑฐ๋ ๋ผ๋ ๊ฒ์ ์๊ฐ๋ฝ์ ํ ๋ฒ ์์ง์๋ค๊ณ ํ๋ค. ์ด๋ค ๋ฉ๋ก๋๊ฐ ์ฃผ์ด์ก์ ๋, ์๊ฐ๋ฝ์ ๊ฐ์ฅ ์ ๊ฒ ์์ง์ด๋ ํ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฉ๋ก๋์ ํฌํจ๋์ด ์๋ ์์ ์ N๊ณผ ํ ์ค์ ์๋ ํ๋ ์ ์ P๊ฐ ์ฃผ์ด์ง๋ค. (N ≤ 500,000, 2 ≤ P ≤ 300,000)
๋ค์ N๊ฐ ์ค์๋ ๋ฉ๋ก๋์ ํ ์์ ๋ํ๋ด๋ ๋ ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ฒซ ๋ฒ์งธ ์ ์๋ ์ค์ ๋ฒํธ์ด๊ณ ๋ ๋ฒ์งธ ์ ์๋ ๊ทธ ์ค์์ ๋๋ฌ์ผ ํ๋ ํ๋ ์ ๋ฒํธ์ด๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์์ ์์๋๋ก ๊ธฐํ๋ฅผ ์ฐ์ฃผํด์ผ ํ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฉ๋ก๋๋ฅผ ์ฐ์ฃผํ๋๋ฐ ํ์ํ ์ต์ ์๊ฐ๋ฝ ์์ง์์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
5 15
2 8
2 10
2 12
2 10
2 5์์ ์ถ๋ ฅ 1
7
์์ ์ ๋ ฅ 2
7 15
1 5
2 3
2 5
2 7
2 4
1 5
1 3์์ ์ถ๋ ฅ 2
9
๐ ํ์ด
import sys input = sys.stdin.readline n, p = map(int, input().split()) lines = [[] for _ in range(7)] cnt = 0 for _ in range(n): line, fret = map(int, input().split()) line = lines[line - 1] while line and fret < line[-1]: line.pop() cnt += 1 if not line or fret > line[-1]: line.append(fret) cnt += 1 print(cnt)
ํ ์ค์ ๋๋ ค์๋ ํ๋ ๋ฒํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด stack์ ์ฌ์ฉํ๊ณ , ์ค์ด ์ฌ๋ฌ๊ฐ์ด๊ธฐ ๋๋ฌธ์ stack๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํฉ๋๋ค.
- line: ํด๋น ์ค stack
- fret: ํ์ฌ ๋๋ฅด๋ ค๋ ํ๋ ๋ฒํธ
stack ์ํ์ ๊ฒฝ์ฐ์ ์๋ฅผ ์ดํด ๋ณด๋ฉด ํฌ๊ฒ ์๋ 7๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ทจํด์ผ ํ ๋์์ pop์ด๊ฑฐ๋ append์ด๊ฑฐ๋ ๋ ์ค ํ๋์ด๋ฏ๋ก, pop์ด ํ์ํ ๊ฒฝ์ฐ์ append๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ฅผ ์ด๋ถ๋ฒ์ ์ผ๋ก ๋๋ ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค.
- while line and fret < line[-1]
stack์ด ์ฐจ ์๊ณ stack top์ด ๋๋ฅด๋ ค๋ ํ๋ ๋ณด๋ค ํฐ ๋ฒํธ์ธ ๊ฒฝ์ฐ pop - if not line or fret > line[-1]
stack์ด ๋น์ด ์๊ฑฐ๋ stack top์ด ๋๋ฅด๋ ค๋ ํ๋ ๋ณด๋ค ์์ ๋ฒํธ์ธ ๊ฒฝ์ฐ append
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 2594 ๋์ด๊ณต์ (๊ตฌํ) (0) 2022.07.02 [Python] ๋ฐฑ์ค 19638 ์ผํฐ์ ๋ง๋ฒ์ ๋ฟ ๋ง์น (Heapq) (0) 2022.07.02 [Python] ๋ฐฑ์ค 16165 ๊ฑธ๊ทธ๋ฃน ๋ง์คํฐ ์ค์์ด (Dictionary) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (Deque) (0) 2022.07.02 [Python] ๋ฐฑ์ค 1966 ํ๋ฆฐํฐ ํ (Deque) (0) 2022.07.02