๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/1874
๋ฐ์ํ
๋์ ํ์ด
๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ ์๊ฐ์ด ์กฐ๊ธ ๊ฑธ๋ ธ์ง๋ง, ์ดํดํ๊ณ ๋๋ ์ด๋ ค์ด ๋ฌธ์ ๋ ์๋์๋ค.
- ๋ฌธ์ ์ ์ฒซ๋ฒ์ฌ ์ ์ถ๋ ฅ์ ์์๋ก ๋ค์ด๋ณด์๋ค. (8 4 3 6 8 7 5 2 1)
- ์ ๋ ฅ์ ํด์ํด๋ณด๋ฉด, ์ฒ์ ์ซ์ 8์ ๊ธฐ์ค์ผ๋ก 8 ๋ฒ ์ ๋ ฅ ๋ฐ์๊ฑฐ๊ณ , ์์ด์ 4,3,,,, ์ด๋ ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ผ๋ ์๋ฏธ์ด๋ค.
- ๋ฐ๋ผ์ n์ 8 ๋ก ๋๊ณ for ๋ฌธ์ ์ด์ฉํ์ฌ ๋ค์ 8๋ฒ ์ ๋ ฅ์ ๋ฐ์.
- ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ํด์ํด๋ณด๋ฉด, stack์ ์ด์ฉํด์ 4,3,6,8,7,5,2,1 ์ด๋ผ๋ ์์ด์ ๋ง๋ค๊ณ ์ถ์๋ฐ, stack์ด ์ด๋ป๊ฒ ๋์ํ๋์ง๋ฅผ ์๊ณ ์ถ๋ค๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ์ค๋ฆ์ฐจ์์ผ๋ก ๊ตฌ์ฑ๊ฐ๋ฅํ ๋น์คํ์ ๋ง๋ค์ด์ฃผ์. (stack ๋ฐฐ์ด ์์ฑ)
- ๊ทธ๋ฆฌ๊ณ stack์ ๋์๋ฐฉ์์ ์ ์ ์๋๋ก answer๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด +.- ๋ฅผ ๋ฃ์ด์ค๊ฒ์ด๋ค.
- ---------------------------------------------------------------------------------
- ์์ด์ ์ฒ์ ์๋ก 4๊ฐ ์ค๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ๊ณผ์ ์ด ํ์ํ๋ค.
- stack์ Last in First Out ์ ์ฑ ์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ [1, 2, 3, 4] ๋ผ๋ stack์ด์ด์ผ๋ง 4๊ฐ ์ถ๋ ฅ ๊ฐ๋ฅํ๋ค. (๋งจ ๋ค์์๋ ์๊ฐ ๊ฐ์ฅ ์ฒ์์ ์ถ๋ ฅ๋์ด์ผํ๋ฏ๋ก)
- ๋ฐ๋ผ์ count ๋ณ์๋ฅผ ๋ง๋ค์ด ํ๋์ฉ ๋ํด๊ฐ๋ฉด์ stack์ ๋ฃ์ด์ฃผ๊ณ , [1,2,3,4] stack์ ๋ง๋ค์ด์ฃผ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก stack์๋ 1,2,3,4 ๋ผ๋ ์๊ฐ push๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋์์ + ๋ฅผ answer๋ฐฐ์ด์ ๋ฃ์ด์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ํ ๋ฒ ์คํ์ผ๋ก ๋ค์ด๊ฐ ์ซ์๋ ์ค๋ณต๋์ง ์๋๋ค๊ณ ํ์๊ธฐ์ +=1 ์ฉ count์ ๋ํด์ฃผ์๋ค.
- ์ฒ์์๋ก 4๋ฅผ ๋ฝ์๋ด๊ธฐ ์ํด stack์์ 4๋ฅผ ๋ฝ์๋ฒ๋ฆด ๊ฒ์ด๋ค.
- stack์์ popLast() ๋ฉ์๋๋ฅผ ํตํด 4๋ฅผ ๋ฝ์์ฃผ์๋ค. ์ด์ ๋จ์ stack = [1,2,3] ์ด๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก stack์ ๋์์ ์ถ๋ ฅํด์ผํ๋ answer ๋ฐฐ์ด์ -๋ฅผ ๋ฃ์ด์ค๋ค. ์ง๊ธ answer=[+,+,+,+,-]์ด๋ค.
- ๋ค์ ์์ด๋ก ์์ผํ๋ ์๋ 3์ด๋ค. 3์ ์ง๊ธ ๋ฐ๋ก stack์์ ์ถ์ถ์ด ๊ฐ๋ฅํ๋ค.
- count๋ 5๊ฐ ๋์๊ณ , num์ 3์ด๋๊น while ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๊ฑฐ์น์ง ์๋๋ค. (push๋ฅผ ๊ฑด๋๋ด๋ค.)
- if ๋ฌธ์ผ๋ก ๊ฐ๋๋ฐ, stack.last = 3 ์ด๊ณ num=3 ์ด๋, ๊ฐ๊ธฐ ๋๋ฌธ์ if ๋ฌธ์ ํต๊ณผํ๋ฉฐ pop ๊ณผ์ ์ ์ํํ๋ค.
์ด๋ฐ์์ผ๋ก ๋ฐ๋ณตํ๋ฉด์ ๋์์ ํ๊ฒ๋ ์ฝ๋๋ฅผ ์๋์ฒ๋ผ ๊ตฌ์ฑํ๋ค.
//push : + , pop : -, ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ : NO
//์ฒ์ ์ n , ์ดํ n ๋ฒ ์
๋ ฅ ๋ฐ์
import Foundation
let n = Int(readLine()!)!
var count = 1
var stack: [Int] = []
var answer: [String] = []
for _ in 0..<n {
let num = Int(readLine()!)!
while count <= num {
stack.append(count)
answer.append("+")
count += 1
}
if stack.last == num {
stack.popLast()
answer.append("-")
} else {
print("NO")
exit(0)
}
}
print(answer.joined(separator: "\n"))
๋ฐ์ํ
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 10845๋ฒ - ํ (0) | 2022.02.04 |
---|---|
[๋ฐฑ์ค] (Swift) 1406๋ฒ - ์๋ํฐ (2) | 2022.01.30 |
[๋ฐฑ์ค] (Swift) 9012๋ฒ - ๊ดํธ (0) | 2022.01.19 |
[๋ฐฑ์ค] (Swift) 9093๋ฒ - ๋จ์ด ๋ค์ง๊ธฐ (0) | 2022.01.16 |
[๋ฐฑ์ค] (Swift) 10828๋ฒ - ์คํ(stack) (0) | 2022.01.16 |