λ¬Έμ μ€λͺ
KOI ν΅μ μ°κ΅¬μλ λ μ΄μ λ₯Ό μ΄μ©ν μλ‘μ΄ λΉλ° ν΅μ μμ€ν κ°λ°μ μν μ€νμ νκ³ μλ€. μ€νμ μνμ¬ μΌμ§μ μμ Nκ°μ λμ΄κ° μλ‘ λ€λ₯Έ νμ μν μ§μ μ μΌμͺ½λΆν° μ€λ₯Έμͺ½ λ°©ν₯μΌλ‘ μ°¨λ‘λ‘ μΈμ°κ³ , κ° νμ κΌλκΈ°μ λ μ΄μ μ‘μ κΈ°λ₯Ό μ€μΉνμλ€. λͺ¨λ νμ λ μ΄μ μ‘μ κΈ°λ λ μ΄μ μ νΈλ₯Ό μ§νλ©΄κ³Ό νννκ² μν μ§μ μ μΌμͺ½ λ°©ν₯μΌλ‘ λ°μ¬νκ³ , νμ κΈ°λ₯ λͺ¨λμλ λ μ΄μ μ νΈλ₯Ό μμ νλ μ₯μΉκ° μ€μΉλμ΄ μλ€. νλμ νμμ λ°μ¬λ λ μ΄μ μ νΈλ κ°μ₯ λ¨Όμ λ§λλ λ¨ νλμ νμμλ§ μμ μ΄ κ°λ₯νλ€.
μλ₯Ό λ€μ΄ λμ΄κ° 6, 9, 5, 7, 4μΈ λ€μ― κ°μ νμ΄ μν μ§μ μ μΌλ ¬λ‘ μ μκ³ , λͺ¨λ νμμλ μ£Όμ΄μ§ ν μμμ λ°λ λ°©ν₯(μΌμͺ½ λ°©ν₯)μΌλ‘ λμμ λ μ΄μ μ νΈλ₯Ό λ°μ¬νλ€κ³ νμ. κ·Έλ¬λ©΄, λμ΄κ° 4μΈ λ€μ― λ²μ§Έ νμμ λ°μ¬ν λ μ΄μ μ νΈλ λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ΄ μμ μ νκ³ , λμ΄κ° 7μΈ λ€ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄, λμ΄κ° 5μΈ μΈ λ²μ§Έ νμ μ νΈλ λμ΄κ° 9μΈ λ λ²μ§Έ νμ΄ μμ μ νλ€. λμ΄κ° 9μΈ λ λ²μ§Έ νκ³Ό λμ΄κ° 6μΈ μ²« λ²μ§Έ νμ΄ λ³΄λΈ λ μ΄μ μ νΈλ μ΄λ€ νμμλ μμ μ νμ§ λͺ»νλ€.
νλ€μ κ°μ Nκ³Ό νλ€μ λμ΄κ° μ£Όμ΄μ§ λ, κ°κ°μ νμμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μ΄λ νμμ μμ νλμ§λ₯Ό μμλ΄λ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ λ ₯
첫째 μ€μ νμ μλ₯Ό λνλ΄λ μ μ Nμ΄ μ£Όμ΄μ§λ€. Nμ 1 μ΄μ 500,000 μ΄νμ΄λ€. λμ§Έ μ€μλ Nκ°μ νλ€μ λμ΄κ° μ§μ μμ λμΈ μμλλ‘ νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μ£Όμ΄μ§λ€. νλ€μ λμ΄λ 1 μ΄μ 100,000,000 μ΄νμ μ μμ΄λ€.
μΆλ ₯
첫째 μ€μ μ£Όμ΄μ§ νλ€μ μμλλ‘ κ°κ°μ νλ€μμ λ°μ¬ν λ μ΄μ μ νΈλ₯Ό μμ ν νλ€μ λ²νΈλ₯Ό νλμ λΉμΉΈμ μ¬μ΄μ λκ³ μΆλ ₯νλ€. λ§μ½ λ μ΄μ μ νΈλ₯Ό μμ νλ νμ΄ μ‘΄μ¬νμ§ μμΌλ©΄ 0μ μΆλ ₯νλ€.
μ μΆλ ₯ μμ
μ λ ₯
5
6 9 5 7 4
μΆλ ₯
0 0 2 2 4
(μμ μμ λ‘ νλ¨νκΈ° νλ λΆλΆμ΄ μλ€κ³ μκ°λμ΄ μΆκ°)
λ΄κ° λ§λ μ λ ₯
4
9 3 2 8
λ΄κ° λ§λ μΆλ ₯
0 1 2 1
λ΄ λ¬Έμ νμ΄
import Foundation
let count = Int(readLine()!)!
let top = readLine()!.components(separatedBy: " ").map{Int($0)!} // ν λμ΄ μ μ₯
var result = "0" // κ²°κ³Ό λμ
var stack = [[0, top[0]]] // topμ μΈλ±μ€, λμ΄ κ°μ λ΄λ 2μ°¨μ λ°°μ΄
for i in 1..<count {
if top[i-1] < top[i] {
if stack[stack.count-1][1] < top[i] {
while stack[stack.count-1][1] < top[i] {
stack.removeLast()
if stack.isEmpty { break }
}
}
if stack.isEmpty {
result.append(" 0")
}
else {
result.append(" " + String(stack[stack.count-1][0] + 1))
}
stack.append([i, top[i]])
}
else {
result.append(" " + String(stack[stack.count-1][0] + 1))
stack.append([i, top[i]])
}
}
print(result)
μ΄ λ¬Έμ λ μ²μμ 2μ€ forλ¬Έμ μ¬μ©νμ¬ μ«μλ³λ‘ κ·Έ μ κΉμ§μ μ«μ μ€
κ°μ₯ κ°κΉμ°λ©΄μ μκΈ° μμ λ³΄λ€ ν° μ«μλ₯Ό μ°Ύλ λ°©μμΌλ‘ νμ΄νμλ€.
νμ§λ§ μκ°μ΄κ³Όκ° λμ΄ filter λ± μ€μννΈ ν¨μλ₯Ό μ κ·Ή νμ©νμ¬ νΈλ λ°©λ²λ μλν΄λ΄€λλ°,
μ΄ λν μκ°μ΄κ³Όλμλ€.γ λ°λΌμ μλ‘ μκ°ν΄λΈ λ°©λ²μ μλ νμ΄νκ² λ€.
[λ³μ μ€λͺ ]
- stackμ΄λΌλ μ΄λ¦μ 2μ°¨μ λ°°μ΄ μμ±. μ΄λ topμ μΈλ±μ€, λμ΄λ₯Ό μμΌλ‘ λ°μ.
- 본격μ μΈ μ°μ° μμ μ , κ°μ₯ 첫 λ²μ§Έ νμ μΈλ±μ€μ λμ΄λ₯Ό λ¨Όμ stackμ μ μ₯,
resultμλ 0μ λ¨Όμ μ μ₯ν΄μ£Όμλ€. (μ΄μ°¨νΌ 첫 λ²μ§Έ μΈλ±μ€λ λ³΄λΌ μ μλ νμ΄ μκΈ° λλ¬Έ.)
[νμ΄ λ‘μ§]
π‘ νΌλλ°±
- μ€λ νλ£¨μ’ μΌ λ± μ΄ νλ¬Έμ μ 맀λ¬λ €μ,, μ΄κ²λ§! νμλ€.γ
- μ²μμ λ΄€μλ μ λ§ μ¬μ보μλλ°, λ§μ νμ΄λ³΄λ μ λ§ μκ° λ³΅μ‘λ λ§μΆκΈ° λ무λ무 μ΄λ €μ΄ λ¬Έμ μλ€.
- μ€λ νΌκ²λ μ λ§ κ²¨μ°κ²¨μ° νκ²λ κ²μ΄κΈ° λ무λ€,, λ€μμ κΌ λ€μ νλ² νμ΄λ³΄κ³ 볡μ΅ν΄μΌκ² λ€.
λ¬Έμ
'3οΈβ£ Swift > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift Algorithm] λ€λ¦¬λ₯Ό μ§λλ νΈλ Programmers(Lv.2) (0) | 2021.08.06 |
---|---|
[Swift Algorithm] μ₯μ μ μ κΎΈλ―ΈκΈ° BOJ #6198 (0) | 2021.08.06 |
[Swift Algorithm] μ€ν μμ΄ BOJ #1874 (2) | 2021.08.04 |
[Swift Algorithm] μ λ‘ BOJ #10773 (0) | 2021.08.04 |
[Swift Algorithm] μ€ν BOJ #10828 (0) | 2021.08.04 |
λκΈ