[Swift]BOJ-10845

BOJ-10845, 큐

문제 📑

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

 

10845번: 큐

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

www.acmicpc.net

문제 정리 ▾

BOJ-10845

  • 저번 스택(10828) 문제와 정말 비슷한 유형이었다.
  • 명령어의 개수를 입력받고, 각각의 명령어에 맞는 기능을 구현해주면 된다.
    • push: 정수 x를 큐에 넣는 연산
    • pop: 큐에 가장 앞에 있는 정수를 빼고, 그 수를 출력 but! 큐가 비어있으면 "-1" 출력
    • size: 큐에 사이즈 출력
    • empty: 큐가 비어있으면 "1", 아니면 "0" 출력
    • front: 큐의 가장 에 있는 정수 출력, but! 큐가 비어있으면 "-1" 출력
    • back: 큐의 가장 에 있는 정수 출력, but! 큐가 비어있으면 "-1" 출력

 

접근 🚶🏻

나의 생각 ▾

  • 저번 스택과 비슷한 문제이기에 저번과 비슷한 케이스로 풀면 된다고 생각했다.

 

나의 해결 ▾

var queue = [Int]()
func solution() {
    for _ in 0..<Int(readLine()!)! {
        let order = readLine()!.split(separator: " ")

        switch order[0] {
        case "push":
            push(Int(order[1])!)

        case "pop":
            print(pop())

        case "size":
            print(size())

        case "empty":
            print(empty())

        case "front":
            print(front())

        default:
            print(back())
        }

    }
}

func push(_ value: Int){
    queue.append(value)
}

func pop() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.removeFirst()
    }
}

func size() -> Int {
    return queue.count
}

func empty() -> Int {
    if queue.isEmpty {
        return 1
    } else {
        return 0
    }
}

func front() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.first!
    }
}

func back() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.last!
    }
}

solution()
  • 코드에 관한 내용은 밑에서 살펴보자 😀

 

코드 리뷰 ▾

push 외에 모든 함수는 Int형을 반환하도록 설계를 하였다.
func push(_ value: Int){
    queue.append(value)
}
  • push는 말 그대로 queue라는 Int형 배열 변수에 값을 넣어주면 된다.

func pop() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.removeFirst()
    }
}
  • pop은 큐가 비어있으면 -1을, 안비어있으면 queue.removeFirst()를 통해 가장 앞의 값을 지워줌과 동시에 반환할 수 있도록 구현했다.

func size() -> Int {
    return queue.count
}

func empty() -> Int {
    if queue.isEmpty {
        return 1
    } else {
        return 0
    }
}
  • size는 queue의 크기를 반환해주면 되기 때문에 queue.count를 반환시켰다.
  • emtpy비어있는지 여부이기 때문에 if문과 queue.isEmpty를 사용해 각각의 케이스에 맞게 값을 반환해주었다.

func front() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.first!
    }
}

func back() -> Int {
    if queue.isEmpty {
        return -1
    } else {
        return queue.last!
    }
}
  • front와 back은 같은 구조이어서, 비어있지 않을 경우만 queue.first! || queue.last! 이렇게 구분해 구현해주면 끝!!

 

Additional 📂

  • 스택 문제와 비슷한 구조라 보자마자 바로 풀 수 있었다.
  • 자료 구조의 기반은 잘 쌓았다고 생각돼서 나름 뿌듯했다. 😆
10866번(덱) 문제도 이와 비슷하여 따로 게시물을 작성하지 않았습니다. 😅

'Algorithm.zip' 카테고리의 다른 글

[Swift]BOJ-10799  (0) 2022.02.04
[Swift]BOJ-17413  (0) 2022.02.03
[Swift]BOJ-1406  (0) 2022.02.01
[Swift]BOJ-9012  (0) 2022.01.31
[Swift]BOJ-9093  (0) 2022.01.31