[Baekjoon] - 10845. ํ(S4)

์˜ค๋™ํ›ˆยท2022๋…„ 1์›” 3์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
16/58
post-thumbnail

1. Problem ๐Ÿ“ƒ

๐Ÿ“š ์ถœ์ฒ˜ - 10845 - ํ

๋ฌธ์ œ ์„ค๋ช…
์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ์—ฌ์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ํ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ํ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • front: ํ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • back: ํ์˜ ๊ฐ€์žฅ ๋’ค์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ํ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ
์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์งˆ ๋•Œ๋งˆ๋‹ค, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ์˜ˆ์ œ ์ถœ๋ ฅ
--15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
1
2
2
0
1
2
-1
0
1
-1
0
3

2. Logic ๐Ÿ‘จโ€๐Ÿซ

๋ฌธ์ œ์— ์ฃผ์–ด์ง„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ push๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋‹จ์–ด๋Š” ํ•œ ๋‹จ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜์ง€๋งŒ, push์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ex) push 1๊ณผ ๊ฐ™์ด ๋˜์–ด ์žˆ์–ด ์ˆซ์ž๋ฅผ ๋–ผ์–ด๋‚ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋งŒ ์œ ์˜ํ•˜๋ฉด ์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

3. Code ๐Ÿ’ป

1. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ ๐Ÿ˜

from queue import deque
import sys
queue = deque()
input = sys.stdin.readline

def check(queue, word):
    if word[0] == 'front':
        if len(queue) != 0:
            print(queue[0])
        else:
            print(-1)
    elif word[0] == 'back':
        if len(queue) != 0:
            print(queue[-1])
        else:
            print(-1)
    elif word[0] == 'size':
        print(len(queue))
    elif word[0] == 'empty':
        if len(queue) == 0:
            print(1)
        else:
            print(0)
    elif word[0] == 'pop':
        if len(queue) > 0:
            print(queue.popleft())
        else:
            print(-1)
    else:
        queue.append(int(word[1]))

N = int(input())

for i in range(N):
    word = input().split()
    check(queue, word)

4. Feedback ๐Ÿ“š

1. Collections.deque

1. deque๋ž€

Deque(๋ฐํฌ)๋Š” double-ended queue ์˜ ์ค„์ž„๋ง๋กœ, ์•ž๊ณผ ๋’ค์—์„œ ์ฆ‰, ์–‘๋ฐฉํ–ฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” queueํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ฆผ์€ deque์˜ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ทธ๋ฆผ์ด๋‹ค.

python์—์„œ collections.deque๋Š” list์™€ ๋น„์Šทํ•˜๋‹ค. list์˜ append(), pop()๋“ฑ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ deque์—์„œ๋„ ์ œ๊ณตํ•œ๋‹ค. ์˜ˆ์ œ ์†Œ์Šค์ฝ”๋“œ๋“ค์„ ํ†ตํ•ด list์™€ deque์˜ ์ฐจ์ด๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. collections.deque์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ docs.python.org์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

2. collections.deque์˜ ๋ฉ”์†Œ๋“œ(method)๋“ค

collections.deque์˜ ๋ฉ”์†Œ๋“œ๋“ค ์ค‘ list์™€ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š” ๋ฉ”์†Œ๋“œ๋“ค ์œ„์ฃผ๋กœ ์‚ดํŽด ๋ณด๋„๋ก ํ•œ๋‹ค. ์ „์ฒด ๋ฉ”์†Œ๋“œ๋“ค์€ docs.python.org์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

1) append(x)

list.append(x)์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ x๋ฅผ deque์˜ ์˜ค๋ฅธ์ชฝ(๋งˆ์ง€๋ง‰)์— ์ถ”๊ฐ€(์‚ฝ์ž…)ํ•ด์ค€๋‹ค.

2) appendleft(x)

์•ž์—์„œ ์„ค๋ช…ํ–ˆ๋‹ค์‹œํ”ผ, deque๋Š” ์–‘๋ฐฉํ–ฅ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค. ๋”ฐ๋ผ์„œ, append(x)๊ฐ€ ์˜ค๋ฅธ์ชฝ์—์„œ ์ถ”๊ฐ€(์‚ฝ์ž…)์„ ํ•ด์ค€๋‹ค๋ฉด, appendleft(x)๋Š” ์™ผ์ชฝ ์ฆ‰, ์•ž์ชฝ์—์„œ x๋ฅผ ์ถ”๊ฐ€(์‚ฝ์ž…)ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

3) extend(iterable)

list.extend(iterable)๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ iterable argument(list, str, tuple...)๋ฅผ ์˜ค๋ฅธ์ชฝ(๋งˆ์ง€๋ง‰)์— elements๋ฅผ ์ถ”๊ฐ€(์‚ฝ์ž…)ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. (iterable argument ๋Š” arguments์˜ ๊ฐ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐ˜ํ™˜ ๊ฐ€๋Šฅํ•œ object๋ฅผ ์˜๋ฏธํ•œ๋‹ค.) [์˜ˆ์ œ3-2]๋Š” append vs extend์˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ธ ์˜ˆ์ œ์ด๋‹ค.

4) extendleft(iterable)

collections.deque.extendleft()๋Š” appendleft()์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์™ผ์ชฝ(์•ž์ชฝ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

5) pop()

list.pop()๊ณผ ๊ฐ™์ด ์˜ค๋ฅธ์ชฝ(๋งˆ์ง€๋ง‰)์—์„œ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ œ๊ฑฐ์™€ ๋ฐ˜ํ™˜(remove and return)์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

6) popleft()

pop()์˜ ๋ฐ˜๋Œ€๋กœ, ์™ผ์ชฝ(์•ž์ชฝ)์—์„œ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ œ๊ฑฐ์™€ ๋ฐ˜ํ™˜(remove and return)์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

7) rotate(n)

collections.deque.rotate(n)์€ ์š”์†Œ๋“ค(elements)์„ n๊ฐ’ ๋งŒํผ ํšŒ์ „ ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. n์˜ ๊ฐ’์ด ์Œ์ˆ˜(negative)์ด๋ฉด ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ , n์˜ ๊ฐ’์ด ์–‘์ˆ˜์ด๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „ํ•œ๋‹ค.

profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค๐Ÿฅ

0๊ฐœ์˜ ๋Œ“๊ธ€