오늘부터 1일 1문제씩 알고리즘 풀기로 친구들이랑 스터디를 만들었다
8월 첫날인 만큼 easy한걸로 시작했다
2학기까지 꾸준히 유지해봐야지!
근데 문제 이해가 안가서 한 7번정도 읽었다
외국문제를 이상하게 번역한건지 말을 이상하게 해논거같다
문제 푸는 시간보다 이해하는 시간이 더 오래걸린듯...
막상 코드짜는건 15분정도면 풀수있는 쉬운문제이다
from collections import deque
n,m = map(int,input().split())
back = [i+1 for i in range(n)]
test = deque(list(map(int,input().split())))
test1 = deque(back)
test2 = deque(back)
answer = 0
for _ in range(m):
count1 = 0
count2 = 0
while(1):
if test1[0] == test[0]:
test1.popleft()
break
else :
count1 += 1
test1.rotate(1)
while(1):
if test2[0] == test[0]:
test2.popleft()
break
else :
count2 += 1
test2.rotate(-1)
answer += min(count1,count2)
test.popleft()
print(answer)
직접 배열을 sift 하지 않고 index의 위치를 저장해서 체크하는식으로 풀면 더 빠를것 같기는 한데
input값의 갯수 자체가 50개 이하로 매우 적어서 그냥 sift 돌려주어도 O(k)로 계산해보면 충분히 여유있는 타임이라 직접 배열 돌리기로 짰다.
사실 머리아파서 그냥 rotate 연습이나 할겸..
전부에 본적은 있었는데 잘 안쓰는 기능이라 문법을 찾아봤다.
deque.rotate(양수) : 오른쪽으로 sift
deque.rotate(음수) : 왼쪽으로 sift
deq = deque([1, 2, 3, 4, 5])
deq.rotate(1)
print(deq)
deque([5, 1, 2, 3, 4])
deq.rotate(-1)
print(deq)
deque([1, 2, 3, 4, 5])
내일은 프로그래머스 풀거다
끝!