λ¬Έμ μ€λͺ
μ€ν (stack)μ κΈ°λ³Έμ μΈ μλ£κ΅¬μ‘° μ€ νλλ‘, μ»΄ν¨ν° νλ‘κ·Έλ¨μ μμ±ν λ μμ£Ό μ΄μ©λλ κ°λ μ΄λ€. μ€νμ μλ£λ₯Ό λ£λ (push) μ ꡬμ μλ£λ₯Ό λ½λ (pop) μ κ΅¬κ° κ°μ μ μΌ λμ€μ λ€μ΄κ° μλ£κ° μ μΌ λ¨Όμ λμ€λ (LIFO, Last in First out) νΉμ±μ κ°μ§κ³ μλ€.
1λΆν° nκΉμ§μ μλ₯Ό μ€νμ λ£μλ€κ° λ½μ λμ΄λμμΌλ‘μ¨, νλμ μμ΄μ λ§λ€ μ μλ€. μ΄λ, μ€νμ pushνλ μμλ λ°λμ μ€λ¦μ°¨μμ μ§ν€λλ‘ νλ€κ³ νμ. μμμ μμ΄μ΄ μ£Όμ΄μ‘μ λ μ€νμ μ΄μ©ν΄ κ·Έ μμ΄μ λ§λ€ μ μλμ§ μλμ§, μλ€λ©΄ μ΄λ€ μμλ‘ pushμ pop μ°μ°μ μνν΄μΌ νλμ§λ₯Ό μμλΌ μ μλ€. μ΄λ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫 μ€μ n (1 ≤ n ≤ 100,000)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° nκ°μ μ€μλ μμ΄μ μ΄λ£¨λ 1μ΄μ nμ΄νμ μ μκ° νλμ© μμλλ‘ μ£Όμ΄μ§λ€. λ¬Όλ‘ κ°μ μ μκ° λ λ² λμ€λ μΌμ μλ€.
μΆλ ₯
μ λ ₯λ μμ΄μ λ§λ€κΈ° μν΄ νμν μ°μ°μ ν μ€μ ν κ°μ© μΆλ ₯νλ€. pushμ°μ°μ +λ‘, pop μ°μ°μ -λ‘ νννλλ‘ νλ€. λΆκ°λ₯ν κ²½μ° NOλ₯Ό μΆλ ₯νλ€.
λ΄ λ¬Έμ νμ΄
μ λ ₯ 1
8
4
3
6
8
7
5
2
1
μΆλ ₯1
+
+
+
+
-
-
+
+
-
+
+
-
-
-
-
-
μ λ ₯2
5
1
2
5
3
4
μΆλ ₯2
NO
λ΄ λ¬Έμ νμ΄
import Foundation
var n = Int(readLine()!)!
var point = Array(repeating: 0, count: n) // μ«μλ³λ‘ μ
λ ₯λλμ§ νμΈ
var max = 0 // μ§κΈκΉμ§ μ
λ ₯λ μ«μ μ€ κ°μ₯ ν° μ
var pre = 0
var result = [String]() // push, pop μ μ₯
var answer = ""
for i in 0..<n {
let num = Int(readLine()!)!
point[num - 1] = 1
// μ
λ ₯λ μ«μκ° maxλ³΄λ€ ν΄ λ
if num > max {
for _ in 0..<(num - max) {
result.append("+")
}
result.append("-")
pre = num
max = num
}
// μ
λ ₯λ μ«μκ° maxλ³΄λ€ μμ λ
else {
// νμ¬ μ
λ ₯λ μ«μμ κ·Έ μ μ
λ ₯λ μ«μ μ¬μ΄μ μμ§ popλμ§ μμ μκ° μλ€λ©΄, "NO"
if point[((num - 1) + 1)...(pre - 1)].contains(0) {
answer = "NO"
break
}
else {
result.append("-")
pre = num
}
}
if i == n - 1 {
answer = result.joined(separator: "\n")
}
}
print(answer)
μ²μμ μ€ν λ°°μ΄μ λ§λ€κ³ , λ¬Έμ κ·Έλλ‘ push, popμ ν΄μ€¬μ§λ§ μκ°μ΄κ³Όκ° λ°μνμ¬ λ€λ₯Έ νμ΄ λ°©λ²μ μ ννλ€.
νμ΄ λ°©λ²μ μ 리ν κ²μ 첨λΆνλ€. π
[λ¬Έμ λ° λ³μ μ€λͺ ]
- μ μΆλ ₯ μμ 2λ²μ λνλ‘ μμλ₯Ό μμ±νλ€.
- μ΄ λ¬Έμ μμλ μ²μ nμ΄ μ
λ ₯λ ν, μμ΄μ΄ ν μ«μμ© μ°¨λ‘λλ‘ μ
λ ₯λλ€.
(ν΄λΉ μμμμλ nμ΄ 5, μμ΄μ 1 2 5 3 4) - μ²μ μ
λ ₯λ nμ κΈ°μ€μΌλ‘, μμμμλ 5 ν¬κΈ°μ point λ°°μ΄μ μμ±ν΄μ£Όμλ€.
point λ°°μ΄μ [0]μ΄ 1, [1]μ 2, ..., [4]λ 5λ₯Ό κ°λ¦¬ν¨λ€κ³ κ°μ νμ¬ μμ΄μ΄ μ λ ₯λλ μμλλ‘
μ΄λ€ μκ° μ λ ₯λμλμ§ μ²΄ν¬ν΄μ£Όλ κ²μ΄ μ΄ point λ°°μ΄μ μν μ΄λ€. - max λ³μλ μ§κΈκΉμ§ μ λ ₯λ μμ΄μ μλ€ μ€ κ°μ₯ ν° μλ₯Ό μ μ₯νλ€.
- pre λ³μλ νμ¬ μ λ ₯λ μ λ°λ‘ μ΄μ μ μ λ ₯λ μλ₯Ό μ μ₯νλ€.
- result λ°°μ΄μ push, popμ μ°¨λ‘λλ‘ μ μ₯νλ€.
[λ¬Έμ νμ΄ κ³Όμ ]
- λ¨Όμ νμ¬ μ λ ₯λ μ numμ΄ maxλ³΄λ€ ν°μ§ μμμ§λ₯Ό νμΈνλ€.
- μ 첨λΆμ (1), (2), (3)λ²μ λͺ¨λ numμ΄ maxλ³΄λ€ ν° μν©μ΄λ―λ‘ (3)λ²μ λνλ‘ μ€λͺ νκ² λ€.
- numμ΄ 5μ΄λ―λ‘ point[4]μ리μ 5κ° λ€μ΄μλ€λ μλ―Έλ‘ 0μ 1λ‘ λ°κΏμ€λ€.
- maxλ μ΄μ 5μ΄λ―λ‘ maxμ 5λ₯Ό μ μ₯νλ€.
- resultμλ μ΄μ μ
λ ₯ μμΈ preμμ numμ λΊ λ§νΌ "+"λ₯Ό μΆκ°ν΄μ€λ€. μ¬κΈ°μλ 5 - 2μ΄λ―λ‘ "+" μΈκ°.
κ·Έλ¦¬κ³ ν΄λΉ μμ΄μ λ§λ€κΈ° μν΄μλ 5λ₯Ό popνλ€λ μλ―Έμ΄κΈ° λλ¬Έμ νλμ "-"λ μΆκ°ν΄μ€λ€. - μμ κ³Όμ μΌλ‘ numμ΄ 5μμΌλ‘μ¨ ν΄μΌν μ°μ°μ λ§μ³€μΌλ preμ 5λ₯Ό μ μ₯ν΄μ€λ€.
- κ·Έ λ€μ, (4)λ² νμ΄λ‘ κ°λ³΄λ©΄ λλμ΄ numμ΄ maxλ³΄λ€ ν° μν©μ΄λ€.
- λ§μ°¬κ°μ§λ‘ 3μ΄ μ λ ₯λμμμ νμνκΈ° μν΄ point[2]μ 1μ μ μ₯ν΄μ€λ€.
- κ·Έλ¦¬κ³ μ¬κΈ°μλ maxλ³΄λ€ μκ° μμΌλ―λ‘, λ§μ§λ§ μλ₯Ό popνμ λ ν΄λΉ numμ΄ λμ€μ§ μλ μν©μ΄ μκΈΈ μ μλ€.
μ΄ λλ ν΄λΉ numλ³΄λ€ λ ν¬κ³ , λ°λ‘ μ΄μ μ popλ μ μ¬μ΄μ popλμ§ μμ μκ° μ‘΄μ¬νλμ§ νμΈν΄μΌνλ€.
λ°λΌμ point[((num - 1) + 1)...(pre - 1)]. μ¬κΈ°μλ point[3...3]μ 0μ΄ μλμ§ νμΈνλ€.
μ€λ¦μ°¨μμΌλ‘λ§ pushλκΈ° λλ¬Έμ maxκΉμ§μ μλ 무쑰건 pushλμ΄μλ κ²μΈλ°,
0μ΄ μλ€λ©΄, μμ§ popλμ§ μμ μκ° μλ€λ μλ―Έ. λ°λΌμ μμ΄ λ§λ€κΈ°κ° λΆκ°ν¨μ μ μ μλ€. - (λ§μ½ μμ λ²μμ 0μ΄ μ‘΄μ¬νμ§ μλλ€λ©΄ numμ΄ maxλ³΄λ€ ν΄ λμ λμΌνκ² μννλ€.)
π‘ νΌλλ°±
- λ°°μ΄μ κ³μ νμνκ³ μΆκ°, μμ λ₯Ό κ³μ νλ μκ°μ΄ μ΄κ³Όλλ€.
- μ€ν λ¬Έμ λ μ¬μ΄κ² κ°μΌλ©΄μ,, μκ° μ΄κ³Όλλ μΌμ΄ μμ£Ό μκΈ°λ κ² κ°λ€.
- ν¨μ¨μ μΌλ‘ λ¬Έμ νμ΄ν μ μλ λ°©λ²μ λ§μ΄ 곡λΆν΄μΌ ν κ² κ°λ€.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] μ₯μ μ μ κΎΈλ―ΈκΈ° BOJ #6198 (0) | 2021.08.06 |
---|---|
[Swift Algorithm] ν BOJ #2493 (0) | 2021.08.04 |
[Swift Algorithm] μ λ‘ BOJ #10773 (0) | 2021.08.04 |
[Swift Algorithm] μ€ν BOJ #10828 (0) | 2021.08.04 |
[Swift Algorithm] μμΈνΈμ€ λ¬Έμ BOJ #1158 (0) | 2021.07.30 |
λκΈ