๐Ÿ Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ(Python)

Dhey 2022. 3. 31. 16:40
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ 

 

 

1021๋ฒˆ: ํšŒ์ „ํ•˜๋Š” ํ

์ฒซ์งธ ์ค„์— ํ์˜ ํฌ๊ธฐ N๊ณผ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๊ณ , M์€ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง€๋ฏผ์ด๊ฐ€ ๋ฝ‘์•„๋‚ด๋ ค๊ณ  ํ•˜๋Š” ์ˆ˜์˜ ์œ„์น˜๊ฐ€

www.acmicpc.net

 


 

์ œ์ถœ์ฝ”๋“œ 

N, M = map(int, input().split())
P = list(map(int, input().split()))
q = [i for i in range(1, N+1)]
cnt = 0

for i in range(M):
    # ์œ„์น˜ 0๊ณผ์˜ ๊ฑฐ๋ฆฌ ์ฐจ์ด๋กœ ์™ผ์ชฝ์œผ๋กœ or ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•  ์ง€๋ฅผ ๊ฒฐ์ •
    if q.index(P[i]) < len(q)-q.index(P[i]):
        while True:
            if q[0] == P[i]:
                del q[0]
                break
            else:
                q.append(q[0])
                del q[0]
            cnt += 1
    else:
        while True:
            if q[0] == P[i]:
                del q[0]
                break
            else:
                q.insert(0, q[-1])
                del q[-1]
                cnt += 1
print(cnt)

๋ฆฌ์ŠคํŠธ q์˜ 0๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฝ‘์•„๋‚ด๋ ค๋Š” ์›์†Œ์™€ ๋น„๊ตํ•˜์—ฌ ๋™์ผํ•˜๋‹ค๋ฉด q[0]์„ ์‚ญ์ œํ•˜๊ณ  ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด p[0]๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

 

์ฒ˜์Œ์—” ๋ฆฌ์ŠคํŠธ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์œผ๋‚˜ deque(๋ฐํฌ)๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋‹ˆ ์กฐ๊ธˆ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด deque๋กœ๋„ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋‹จ ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. 

 

 

 

๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ๋ฅผ Deque๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ํ’€ ์ˆ˜ ์žˆ๋‹ค.

from collections import deque

N, M = map(int, input().split())
P = list(map(int, input().split()))
q = deque([i for i in range(1, N+1)])
cnt = 0

for i in range(M):
    q_index = q.index(P[i])
    if q_index < len(q)-q_index:
        while True:
            if q[0] == P[i]:
                q.popleft()
                break
            else:
                q.append(q.popleft())
            cnt += 1
    else:
        while True:
            if q[0] == P[i]:
                q.popleft()
                break
            else:
                q.appendleft(q.pop())
                cnt += 1
print(cnt)

 

ํŒŒ์ด์ฌ์€ collections๋ชจ๋“ˆ์˜ deque(Double-ended queue)์„ ํ†ตํ•ด ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด list์˜ ์•ž๊ณผ ๋’ค ๋ชจ๋‘์—์„œ ์›์†Œ์˜ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค๋ฉด, deque ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๊ฒƒ์ด ๋” ์ข‹๋‹ค.

 

 

๋ฐ˜์‘ํ˜•