λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
3️⃣ Swift/Problem Solving

[Swift Algorithm] μŠ€νƒ BOJ #10828

by seolhee2750 2021. 8. 4.
문제 μ„€λͺ…

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒμ„ κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 λ‹€μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό μŠ€νƒμ— λ„£λŠ” 연산이닀.
  • pop: μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • top: μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

 

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 10,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© 주어진닀. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

 

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

μž…μΆœλ ₯ 예제

μž…λ ₯

14
push
1
push
2
top
size
empty
pop
pop
pop
size
empty
pop
push
3
empty
top

좜λ ₯

2
2
0
2
1
-
1
0
1
-
1
0
3

 

λ‚΄ 문제 풀이
import Foundation

let count = Int(readLine()!)!

var stack = [Int]()

for _ in 0..<count {
    let command = readLine()!.components(separatedBy: " ")
    
    if command[0] == "push" { stack.append(Int(command[1])!) }
    else if command[0] == "pop" {
        if stack.isEmpty { print(-1) }
        else { print(stack.removeLast()) }
    }
    else if command[0] == "size" { print(stack.count) }
    else if command[0] == "empty" {
        if stack.isEmpty { print(1) }
        else { print(0) }
    }
    else if command[0] == "top" {
        if stack.isEmpty { print(-1) }
        else { print(stack[stack.count-1]) }
    }
}
  • μŠ€νƒ 배열을 λ§Œλ“€μ–΄μ£Όμ—ˆκ³ , 곡백을 κΈ°μ€€μœΌλ‘œ μ€„λ§ˆλ‹€ μž…λ ₯을 λ°›μ•˜λ‹€.
  • λͺ…λ Ήμ–΄λ³„λ‘œ if문으둜 κ΅¬λΆ„ν•˜μ—¬ λͺ…령을 μˆ˜ν–‰ν–ˆλ‹€.
  • pop, empty, top λͺ…λ Ήμ–΄μ˜ 경우 isEmptyλ₯Ό μ‚¬μš©, 배열이 λΉ„μ—ˆλ‹€λ©΄ -1을 좜λ ₯ν•˜κ²Œ ν•΄μ£Όμ—ˆλ‹€.

 

πŸ’‘ ν”Όλ“œλ°±
  • λ‹€λ₯Έ 풀이λ₯Ό 생각할 것 없이, 문제 κ·ΈλŒ€λ‘œ μŠ€νƒμ„ λ§Œλ“€μ–΄ ν’€μ–΄μ£Όλ©΄ λ˜λŠ” λ¬Έμ œμ˜€κΈ° λ•Œλ¬Έμ— 금방 풀이할 수 μžˆμ—ˆλ‹€.
  • swift ν•¨μˆ˜κ°€ μž˜λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— isEmptyλ‚˜ append, removeLast 등을 μ΄μš©ν•΄ μ‰½κ²Œ ν’€μ—ˆλ‹€.

 


 

 

문제

https://www.acmicpc.net/problem/10828

 

λŒ“κΈ€