๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/1874)
<์คํ ์์ด>
๋ฌธ์
์คํ (stack)์ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋๋ก, ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์์ฃผ ์ด์ฉ๋๋ ๊ฐ๋ ์ด๋ค.
์คํ์ ์๋ฃ๋ฅผ ๋ฃ๋ (push) ์ ๊ตฌ์ ์๋ฃ๋ฅผ ๋ฝ๋ (pop) ์ ๊ตฌ๊ฐ ๊ฐ์ ์ ์ผ ๋์ค์ ๋ค์ด๊ฐ ์๋ฃ๊ฐ ์ ์ผ ๋จผ์ ๋์ค๋
(LIFO, Last in First out) ํน์ฑ์ ๊ฐ์ง๊ณ ์๋ค.
1๋ถํฐ n๊น์ง์ ์๋ฅผ ์คํ์ ๋ฃ์๋ค๊ฐ ๋ฝ์ ๋์ด๋์์ผ๋ก์จ, ํ๋์ ์์ด์ ๋ง๋ค ์ ์๋ค. ์ด๋, ์คํ์ push ํ๋
์์๋ ๋ฐ๋์ ์ค๋ฆ์ฐจ์์ ์งํค๋๋ก ํ๋ค๊ณ ํ์.
์์์ ์์ด์ด ์ฃผ์ด์ก์ ๋ ์คํ์ ์ด์ฉํด ๊ทธ ์์ด์ ๋ง๋ค ์ ์๋์ง ์๋์ง, ์๋ค๋ฉด ์ด๋ค ์์๋ก
push์ pop ์ฐ์ฐ์ ์ํํด์ผ ํ๋์ง๋ฅผ ์์๋ผ ์ ์๋ค. ์ด๋ฅผ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
์ฒซ ์ค์ n (1 ≤ n ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ n๊ฐ์ ์ค์๋ ์์ด์ ์ด๋ฃจ๋ 1 ์ด์ n์ดํ์
์ ์๊ฐ ํ๋์ฉ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ฌผ๋ก ๊ฐ์ ์ ์๊ฐ ๋ ๋ฒ ๋์ค๋ ์ผ์ ์๋ค.
์ถ๋ ฅ
์ ๋ ฅ๋ ์์ด์ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ์ฐ์ฐ์ ํ ์ค์ ํ ๊ฐ์ฉ ์ถ๋ ฅํ๋ค.
push์ฐ์ฐ์ +๋ก, pop ์ฐ์ฐ์ -๋ก ํํํ๋๋ก ํ๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ NO๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
- my solution
import sys
if __name__=='__main__':
n=int(sys.stdin.readline().strip())
arr=[]
for i in range(n): #์์ด ์
๋ ฅ
arr.append(int(sys.stdin.readline().strip()))
idx=0
idx_stack=1
temp=[] #์ค๋ฆ์ฐจ์ push
answer=[] # +,-
result=[] # ๋ง๋ค์ด์ง ์์ด
while True:
if idx>=n or idx_stack>n+1: #์ข
๋ฃ ์กฐ๊ฑด
break
if len(temp)!=0 and temp[-1]==arr[idx]: #temp์ ์ด๋ฏธ ์๋ ๊ฐ pop
result.append(temp.pop())
answer.append("-")
idx+=1
elif arr[idx]!=idx_stack: # push
temp.append(idx_stack)
idx_stack+=1
answer.append("+")
elif arr[idx]==idx_stack: # ๋ฃ์ผ๋ ค๋ ๊ฐ์ด ํ์ํ ๊ฐ์ด๋ฉด
result.append(idx_stack) # push ์ ์ ๋ฐ๋ก result์ ์ถ๊ฐ
answer.append("+") # puxh
answer.append("-") # pop
idx_stack+=1
idx+=1
if arr==result: # ๋ง๋ค์ด์ง ์์ด์ด ์
๋ ฅ ์์ด๊ณผ ๊ฐ์ผ๋ฉด
for i in answer:
print(i)
else: # ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
print("NO")
์์ ๋ถํฐ ๋ฌธ์ ๋ง ๋ณด๊ณ ์ดํด๋ฅผ ๋ชปํด์ ํฌ๊ธฐํ๋ ๋ฌธ์ ์ด๋ค.
์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด๋ ์๊ฐ๋ณด๋ค ๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ์ฌ์ ๋ค.
1) n์ ๋ ฅ, ๋ง๋ค ์์ด ์ ๋ ฅ_arr
2) while๋ฌธ์ ์ฌ์ฉํ์ฌ ์์ด ๋ง๋ค๊ธฐ
2-1) ์ข ๋ฃ ์กฐ๊ฑด) arr์ index๋ฅผ ๋๊ฑฐ๋ n+1๋ณด๋ค ํฐ ๊ฒฝ์ฐ
2-2) temp์ ์ด๋ฏธ ์๋ ๊ฐ์ด๋ฉด pop
2-3) idx_stack์ด ํ์ํ ๊ฐ์ด ์๋๋ฉด
2-4) idx_stack์ด ์์ด์ ํ์ํ ๊ฐ์ด๋ฉด push
3) ๋ง๋ค์ด์ง ์์ด์ด ์ ๋ ฅ ์์ด๊ณผ ๊ฐ์ผ๋ฉด ์ถ๋ ฅ, ๊ฐ์ง ์์ผ๋ฉด 'NO' ์ถ๋ ฅ
์๊ฐ๐ค
๋ช ๋ฒ์ด๋ ์ง๋์น ๋ฌธ์ ์น๊ณ ๋ ์๊ฐ๋ณด๋ค ๋นจ๋ฆฌ ํด๊ฒฐํ ์ ์์๋ค.
๋ฌธ์ ์ดํด๋ฅผ ๋ชปํ๋ ๊ฒ์ด ์ปธ๋ ๊ฒ ๊ฐ๋ค. ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ๋์๋ ๊ธ๋ฐฉ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์๋ค.
ํ์ด์ฌ์์๋ list๋ฅผ ํ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
๋ด๊ฐ ์๊ฐํ๊ธฐ์ ์ด ๋ฌธ์ ์ ํฌ์ธํธ๋
1) ๋ฌธ์ ์ดํด!!! ๊ฐ ๊ฐ์ฅ ํฌ๊ณ
2) ํ์ด์ฌ_ list์ ํ์ฉ, ์กฐ๊ฑด๋ฌธ ์ฌ์ฉ
์ด์๋ ๊ฒ ๊ฐ๋ค.
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 11399_ATM (0) | 2021.10.20 |
---|---|
[Baekjoon] 1662_์์ถ (0) | 2021.10.10 |
[Baekjoon] 20920_์๋จ์ด ์๊ธฐ๋ ๊ดด๋ก์ (0) | 2021.10.07 |
[Baekjoon] 16922_๋ก๋ง ์ซ์ ๋ง๋ค๊ธฐ (0) | 2021.10.06 |
[Baekjoon] 1935_ํ์ ํ๊ธฐ์2 (0) | 2021.10.04 |