⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다!⚠️
https://www.acmicpc.net/problem/1021
Code
import sys
input = sys.stdin.readline
from collections import deque
max, cycle = map(int, input().split())
list = deque(range(1,max+1))
numbers = deque(map(int, input().split()))
count = 0
while numbers:
mid = len(list)//2
if list.index(numbers[0]) > mid: # 오른쪽으로 회전
while list[0] != numbers[0]:
list.appendleft(list.pop())
count += 1
list.popleft()
numbers.popleft()
else: # 왼쪽으로 회전
while list[0] != numbers[0]:
list.append(list.popleft())
count += 1
list.popleft()
numbers.popleft()
print(count)
Code 필수 요소
1. 큐(덱)에 대한 개념의 이해 및 함수 활용법
2. 좌, 우 회전방향 결정 조건
이것만 생각해내면 절반은 끝났다.
// deque
list라는 리스트에 max+1만큼의 크기에 1부터 max+1까지의 값을 포함하게 만들어주었다.
회전하는 큐를 진행할 때 실제로 숫자 리스트를 만드로 회전시키며 제거하는 방식을 사용했다.
그리고 제거할 숫자의 리스트를 만들어서 똑같이 제거해주며 리스트가 비었을 경우 반복을 종료하게 설계했다.
// 좌, 우 회전방향 결정 조건
숫자가 앞에 가까우면 왼쪽으로 회전하고, 숫자가 뒷쪽에 가까우면 오른쪽으로 회전해야 한다는 기본적인 내용으로부터 시작했다.
중간값을 구하고, 그 값보다 옮기고자 하는 값의 인덱스가 클 경우 오른쪽으로, 작을경우 왼쪽으로 회전시켰다.
음.. 이게 전부다 ㅋㅋㅋㅋ
예전에 C언어로 구현한 적이 있는데 그때는 뭐랄까... 상당히 조잡했지만 내 생각을 이용해서 짠 느낌이라면
파이썬으로 구현한 이 코드는 정형화된 틀에 맞춰서 원리 원칙대로 짠 느낌이다.
C언어로 구현한 코드가 내 머리를 더 많이 사용한거라 더 공부라는 목적에는 맞았던거 같다.
뭐 여튼 깔끔하게 짜는것도 배웠으니까 오히려 좋아
C로 짠거도 한번 구경하고 가주라. 많이 더럽긴 한데 그래도 꽤나 열심히 짰다 ㅋㅋㅋㅋㅋ
https://naemamdaelo.tistory.com/3
-꿑-