본문 바로가기
코딩테스트

[Python] 백준 10866번 - 덱

by 박매트 2024. 6. 10.

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

 

내 코드

from collections import deque
import sys

def isEmptyQueueFront(queue):
    if len(queue) == 0:
        print(-1)
        return False
    else:
        print(queue[0])
        return True

def isEmptyQueueBack(queue):
    if len(queue) == 0:
        print(-1)
        return False
    else:
        print(queue[-1])
        return True    

N = int(input())
queue = deque()
mode = ["push_front", "push_back", "pop_front","pop_back","size","empty","front","back"]

for i in range(N):
    st = sys.stdin.readline().split(" ")
    m = mode.index(st[0].strip())

    if m == 0:
        queue.appendleft(st[1].strip())
    elif m == 1:
        queue.append(st[1].strip())
    elif m == 2:
        if isEmptyQueueFront(queue):
            queue.popleft()
    elif m == 3:
        if isEmptyQueueBack(queue):
            queue.pop()
    elif m == 4:
        print(len(queue))
    elif m == 5:
        if len(queue):
            print(0)
        else:
            print(1)
    elif m == 6:
        isEmptyQueueFront(queue)
    elif m == 7:
        isEmptyQueueBack(queue)

 

지난 번에 풀었던 문제와 유사하다.. 근데 스택이 아닌 큐인..

최대한 간결하게 풀려고 했는데 그게 안된다 ㅠ_ㅠ

오랜만에 큐를 쓰려니 기억이 안났다. 정리해보자

 

# 큐는 놀이공원 생각.. 먼저 온 사람이 먼저 들어감
# 스택은 샌드위치 생각.. 아래에서 위로 쌓이고 위 먼저

# 큐 만들기
from collections import deque
queue = deque()

# 큐 앞에 삽입, list.insert(0,요소) 와 같음
queue.appendleft(요쇼)

# 큐 뒤에 삽입
queue.append(요소)

# 큐 맨앞 삭제
queue.popleft()

# 큐 맨뒤 삭제
queue.pop()

# 큐 길이
len(queue)

 

 

 

Kotlin 버전 답

import java.util.*

fun isEmptyQueueFront(queue: Deque<String>): Boolean {
    return if (queue.isEmpty()) {
        println(-1)
        false
    } else {
        println(queue.first)
        true
    }
}

fun isEmptyQueueBack(queue: Deque<String>): Boolean {
    return if (queue.isEmpty()) {
        println(-1)
        false
    } else {
        println(queue.last)
        true
    }
}

fun main() {
    val input = Scanner(System.`in`)
    val N = input.nextInt()
    input.nextLine() // To consume the newline after the integer input
    val queue: Deque<String> = ArrayDeque()
    val mode = listOf("push_front", "push_back", "pop_front", "pop_back", "size", "empty", "front", "back")

    for (i in 0 until N) {
        val st = input.nextLine().split(" ")
        val m = mode.indexOf(st[0].trim())

        when (m) {
            0 -> queue.addFirst(st[1].trim())
            1 -> queue.addLast(st[1].trim())
            2 -> if (isEmptyQueueFront(queue)) queue.removeFirst()
            3 -> if (isEmptyQueueBack(queue)) queue.removeLast()
            4 -> println(queue.size)
            5 -> println(if (queue.isEmpty()) 1 else 0)
            6 -> isEmptyQueueFront(queue)
            7 -> isEmptyQueueBack(queue)
        }
    }
}

 

좀 깔끔한 것 같다..^^ 코틀린 최고

Kotlin에서 큐 형태는 Deque<String> 이군

import.java.util.*
val deque : Deque<String> = ArrayDeque()

# 큐 앞에 삽입
queue.addFirst(요소)

# 큐 뒤에 삽입
queue.addLast(요소)

# 큐 맨앞 삭제
queue.removeFirst()

# 큐 맨뒤 삭제
queue.removeLast()

# 큐 사이즈
queue.size

# 큐 비어있는 지 확인
queue.isEmpty()

 

메모 ..

파이썬에서 개행 문자 없애기

문자열.strip()

 

코틀린에서 개행 문자 없애기

문자열.trim()