Coding Test/Algorithms

[๋ฐฑ์ค€] 1966. ํ”„๋ฆฐํ„ฐ ํ/Python - Silver3

The Engineer, Lucy 2025. 3. 18. 16:58

โ“๋ฌธ์ œ

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

์„ฑ๋Šฅ ์š”์•ฝ

๋ฉ”๋ชจ๋ฆฌ: 34924 KB, ์‹œ๊ฐ„: 68 ms
๋ฉ”๋ชจ๋ฆฌ: 32412 KB, ์‹œ๊ฐ„: 52 ms
๋ฉ”๋ชจ๋ฆฌ: 32412 KB, ์‹œ๊ฐ„: 48 ms

๋ถ„๋ฅ˜

์ž๋ฃŒ ๊ตฌ์กฐ, ๊ตฌํ˜„, ํ, ์‹œ๋ฎฌ๋ ˆ์ด์…˜

 

๋ฌธ์ œ ์„ค๋ช…

์—ฌ๋Ÿฌ๋ถ„๋„ ์•Œ๋‹ค์‹œํ”ผ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋ฆฐํ„ฐ ๊ธฐ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์ธ์‡„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ธ์‡„ ๋ช…๋ น์„ ๋ฐ›์€ ‘์ˆœ์„œ๋Œ€๋กœ’, ์ฆ‰ ๋จผ์ € ์š”์ฒญ๋œ ๊ฒƒ์„ ๋จผ์ € ์ธ์‡„ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์Œ“์ธ๋‹ค๋ฉด Queue ์ž๋ฃŒ๊ตฌ์กฐ์— ์Œ“์—ฌ์„œ FIFO - First In First Out - ์— ๋”ฐ๋ผ ์ธ์‡„๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ์šด ํ”„๋ฆฐํ„ฐ๊ธฐ ๋‚ด๋ถ€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜์˜€๋Š”๋ฐ, ์ด ํ”„๋ฆฐํ„ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ธ์‡„๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

  1. ํ˜„์žฌ Queue์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ‘์ค‘์š”๋„’๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ๋‚˜๋จธ์ง€ ๋ฌธ์„œ๋“ค ์ค‘ ํ˜„์žฌ ๋ฌธ์„œ๋ณด๋‹ค ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด, ์ด ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•˜์ง€ ์•Š๊ณ  Queue์˜ ๊ฐ€์žฅ ๋’ค์— ์žฌ๋ฐฐ์น˜ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ์ธ์‡„๋ฅผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Queue์— 4๊ฐœ์˜ ๋ฌธ์„œ(A B C D)๊ฐ€ ์žˆ๊ณ , ์ค‘์š”๋„๊ฐ€ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์‡„ํ•˜๊ณ , ๋‹ค์Œ์œผ๋กœ D๋ฅผ ์ธ์‡„ํ•˜๊ณ  A, B๋ฅผ ์ธ์‡„ํ•˜๊ฒŒ ๋œ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ํ•  ์ผ์€, ํ˜„์žฌ Queue์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์ˆ˜์™€ ์ค‘์š”๋„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์–ด๋–ค ํ•œ ๋ฌธ์„œ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ์˜ˆ์—์„œ C๋ฌธ์„œ๋Š” 1๋ฒˆ์งธ๋กœ, A๋ฌธ์„œ๋Š” 3๋ฒˆ์งธ๋กœ ์ธ์‡„๋˜๊ฒŒ ๋œ๋‹ค.

โœ๐Ÿปํ’€์ด

๋จผ์ € ํ˜„์žฌ ํ์—์„œ ๊ฐ€์žฅ ํฐ ์ค‘์š”๋„ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ๋ฅผ ๋‘˜๋Ÿฌ๋ณด๋ฉฐ ์ค‘์š”๋„๊ฐ€ ๋‚ฎ๋‹ค๋ฉด ํ์—์„œ popํ•˜๋ฉด ๋’ค๋กœ ๋‹ค์‹œ ๋„ฃ๋Š”๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค ํ˜„์žฌ ํ์˜ ๊ฐ€์žฅ ํฐ ์ค‘์š”๋„ ๊ฐ’๊ณผ ๊ฐ™์€ ๋ฌธ์„œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ฐพ๊ณ  ์žˆ๋Š” ์ถœ๋ ฅ๋ฌผ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ๋Œ€๋กœ pop์„ ํ•˜๊ณ  cnt๋ฅผ 1 ์ฆ๊ฐ€ํ•˜์—ฌ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ๊ณ„์‚ฐํ•œ๋‹ค.

์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค ๊ฐ€์žฅ ํฐ ์ค‘์š”๋„ ๊ฐ’์ผ ๋•Œ ์ฐพ๊ณ  ์žˆ๋Š” ์ถœ๋ ฅ๋ฌผ์„ ์ฐพ์•˜๋‹ค๋ฉด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ’ป์ฝ”๋“œ

ํ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ

import sys
from collections import deque

input = sys.stdin.readline

T = int(input())

for t in range(T):
    N, M = map(int, input().split())
    D = list(zip(list(map(int, input().split())), range(N)))
    q = deque(D)
    cnt = 1
    while q:
        mx = max(q)[0]
        d = q.popleft()
        if d[0] < mx:
            q.append(d)
        elif d[0] == mx:
            if d[1] == M:
                print(cnt)
                break
            else:
                cnt += 1

๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ(zip์œผ๋กœ tuple ์ƒ์„ฑ ํ›„ list๋กœ ๋ณ€ํ™˜)

import sys

input = sys.stdin.readline

T = int(input())

for t in range(T):
    N, M = map(int, input().split())
    D = list(zip(list(map(int, input().split())), range(N)))
    cnt = 1
    while D:
        mx = max(D)[0]
        d = D.pop(0)
        if d[0] < mx:
            D.append(d)
        elif d[0] == mx:
            if d[1] == M:
                print(cnt)
                break
            else:
                cnt += 1

๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ(List Comprehension ์‚ฌ์šฉ)

import sys

input = sys.stdin.readline

T = int(input())

for t in range(T):
    N, M = map(int, input().split())
    D = [(x, y) for x, y in zip(list(map(int, input().split())), range(N))]
    cnt = 1
    while D:
        mx = max(D)[0]
        d = D.pop(0)
        if d[0] < mx:
            D.append(d)
        elif d[0] == mx:
            if d[1] == M:
                print(cnt)
                break
            else:
                cnt += 1

๐Ÿ“ํ›„๊ธฐ

๋ฆฌ์ŠคํŠธ์—์„œ pop(0)์„ ํ•˜๋ฉด O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฑธ๋ฆฌ๊ณ , deque์œผ๋กœ popํ•˜๋ฉด O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ deque์ด list๋ณด๋‹ค ๋น ๋ฅด๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ฒ˜์Œ์— deque์„ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ max ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๋ฆฌ์ŠคํŠธ์—์„œ max๋Š” ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ CPU  ์บ์‹œ ํ™œ์šฉ์ด ์šฉ์ดํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฐ˜๋ฉด์— deque์€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์ˆœํšŒํ•˜๋Š” ๊ณผ์ •์—์„œ ์ถ”๊ฐ€์ ์ธ ํฌ์ธํ„ฐ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์˜คํžˆ๋ ค ๋” ๋А๋ฆฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™๋‹ค.heapq๋„ ๊ณ ๋ คํ•˜๊ธด ํ–ˆ๋Š”๋ฐ ์ด๋Ÿฌ๋ฉด popํ•  ๋•Œ ์ˆœ์„œ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์•„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜๋‹ค.