๐Ÿงฉ Algorithm/[BOJ] Silver

[BOJ] 1021. ํšŒ์ „ํ•˜๋Š” ํ (Python/์ž๋ฃŒ๊ตฌ์กฐ/Silver 3)

devCloud 2024. 10. 29. 13:19
728x90

 


[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰https://www.acmicpc.net/problem/1021


ํ’€์ด

๐Ÿ’ก ์นด๋“œ์˜ ์ ˆ๋ฐ˜ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค.

 

 

๋นผ๋‚ด๋ ค๋Š” ์นด๋“œ๊ฐ€ ์ค‘๊ฐ„ ๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ์„ ๋•Œ 2๋ฒˆ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

n_deq.rotate(-1)
  • ํ๋ฅผ ์™ผ์ชฝ์œผ๋กœ 1๋งŒํผ ํšŒ์ „

 

๋ฐ˜๋Œ€๋กœ ๋นผ๋‚ด๋ ค๋Š” ์นด๋“œ๊ฐ€ ์ค‘๊ฐ„ ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ์„ ๋•Œ 3๋ฒˆ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

 n_deq.rotate(1)
  • ํ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋งŒํผ ํšŒ์ „

 

Solution

from collections import deque

n, m = map(int, input().split())
pop_num = list(map(int, input().split()))
n_deq = deque()
for i in range(1, n + 1):
    n_deq.append(i)
result = 0
for i in pop_num:
    while n_deq[0] != i:
        if n_deq.index(i) == 0:  # 0๋ฒˆ ์ธ๋ฑ์Šค๊ฐ€ ๋นผ๋‚ด๋ ค๋Š” ์ˆ˜๋ž‘ ๊ฐ™์„ ๋•Œ๊นŒ์ง€
            n_deq.popleft()
        elif n_deq.index(i) <= len(n_deq) // 2:  # ์ค‘๊ฐ„๋ณด๋‹ค ์ดํ•˜์ผ ๋•Œ ์™ผ์ชฝ์œผ๋กœ
            n_deq.rotate(-1)  # 1๋งŒํผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „(๋ฐ˜์‹œ๊ณ„)
            result += 1
        else:
            n_deq.rotate(1)  # 1๋งŒํผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํšŒ์ „(์‹œ๊ณ„)
            result += 1
print(result)

 

์œ„ ์ฝ”๋“œ์˜ ๊ฐœ์„  ์‚ฌํ•ญ

  • while n_deq[0] != i ์กฐ๊ฑด ์‚ฌ์šฉ
    • ๋ฑ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ i๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ํšŒ์ „ํ•˜์—ฌ ๋ฑ์„ ์ •๋ ฌํ•˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ํšŒ์ „๋งŒ ์ˆ˜ํ–‰
  • ๋ถˆํ•„์š”ํ•œ index() ํ˜ธ์ถœ ์ œ๊ฑฐ
    • ๋ฑ์„ ์ง์ ‘ ํ™•์ธํ•˜์—ฌ ํšŒ์ „ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— n_deq.index(i)์˜ ๋ฐ˜๋ณต ํ˜ธ์ถœ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ตœ์ ํ™”๋œ ์ฝ”๋“œ

from collections import deque

n, m = map(int, input().split())
pop_num = list(map(int, input().split()))

# 1๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ๋ฑ์— ์ถ”๊ฐ€
n_deq = deque(range(1, n + 1))
result = 0

for i in pop_num:
    while n_deq[0] != i:  # ๋นผ๋‚ผ ์ˆซ์ž๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์— ์˜ค๋„๋ก ํšŒ์ „
        if n_deq.index(i) <= len(n_deq) // 2:  # ์ค‘๊ฐ„๋ณด๋‹ค ์™ผ์ชฝ์— ๊ฐ€๊นŒ์šฐ๋ฉด ์™ผ์ชฝ ํšŒ์ „
            n_deq.rotate(-1)
        else:  # ์˜ค๋ฅธ์ชฝ์— ๊ฐ€๊นŒ์šฐ๋ฉด ์˜ค๋ฅธ์ชฝ ํšŒ์ „
            n_deq.rotate(1)
        result += 1
    n_deq.popleft()  # ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์— ์žˆ์œผ๋ฉด ๋ฝ‘์•„๋‚ด๊ธฐ

print(result)

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์ œ์ถœ ์ „์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ๊ฒ€์ฆ์„ ํ•ด๋ณด๋Š”๋ฐ ์˜ณ์€ ๊ฒฐ๊ณผ๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š์•˜์—ˆ๋‹ค. ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ์ด ์•ˆ ๋˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. ์นด๋“œ๋ฅผ ๋นผ๋Š” ์—ฐ์‚ฐ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์นด๋“œ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค์–ด ์นด๋“œ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ ํ˜„์žฌ ์นด๋“œ์˜ ์ˆ˜๋งŒํผ ๋‚˜๋ˆ ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ž…๋ ฅ๋ฐ›์€ ์นด๋“œ ์ˆ˜์ธ n ์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ์žˆ์–ด์„œ ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋‚˜์˜ค์ง€ ์•Š๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

๋‹คํ–‰ํžˆ๋„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ์–ด์„œ ์ œ์ถœ ์ „์— ์ˆ˜์ •ํ•˜๊ณ  ์›ํŠธ์— ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ํ•œ ๊ฐœ์˜ ์ผ€์ด์Šค๋งŒ ์žˆ์—ˆ๋‹ค๋ฉด ์•„๋งˆ ๊ฐˆํ”ผ๋ฅผ ๋ชป ์žก์•˜์„ ๊ฒƒ ๊ฐ™๋‹ค. ์—ญ์‹œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์—ฌ๋Ÿฌ๋ฒˆ ๊ฒ€์ฆํ•ด๋ณด๋Š” ๊ณผ์ •์ด ์ค‘์š”ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.


 

728x90