REC

백준 10845번: 큐 - Swift 풀이 본문

Algorithm

백준 10845번: 큐 - Swift 풀이

서서리 2024. 3. 15. 23:43
SMALL

오늘의 문제

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

문제 요약

맨 처음에 입력으로 명령어 개수가 주어지고, 명령대로 수행하는 프로그램 작성

  • push X: 정수 X를 큐에 추가.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력. 큐가 빈 경우에는 -1을 출력.
  • size: 큐에 들어있는 정수의 개수 출력.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력.
  • front: 큐의 가장 앞에 있는 정수를 출력. 큐가 빈 경우에는 -1을 출력.
  • back: 큐의 가장 뒤에 있는 정수를 출력. 큐가 빈 경우에는 -1을 출력.

 

내 풀이

import Foundation

/// 명령어 개수 입력
let N = Int(readLine()!)!
/// Int형 배열로 큐 자료구조 구현
var queue: [Int] = []

for _ in 0..<N {
    // 입력을 띄어쓰기 기준으로 split 했을 때 배열 크기가 2가 되는 것이 push x 밖에 없음을 이용
    let command = readLine()!.split(separator: " ")
    // push를 제외한 다른 명령어들
    if command.count == 1 {
        switch command[0] {
        case "pop": // 큐의 첫번째 값을 출력하고 삭제
            print(queue.first ?? -1) // 큐가 비어있다면 first가 nil이라서 default 값을 -1로 설정해둠
            if !queue.isEmpty { // 큐에 값이 존재할 때만 삭제를 진행
                queue.removeFirst()
            }
        case "size": // 큐에 들어있는 정수의 개수 출력
            print(queue.count)
        case "empty": // 큐가 비었는지 안 비었는지
            print(queue.isEmpty ? 1 : 0)
        case "front": // 큐의 맨 앞 숫자 출력
            print(queue.first ?? -1)
        case "back": // 큐의 맨 뒤 숫자 출력
            print(queue.last ?? -1)
        default:
            break
        }
    } else { // push 명령어
    	// push x에서 x의 값을 큐에 추가
        queue.append(Int(command[1])!)
    }
}

 

코드에 대한 설명은 주석으로 자세히 적었다.

이것도 그냥 '큐'라는 자료구조에 대한 이해만 있으면 다들 쉽게 풀 수 있을 것 같다!

LIST