728x90
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n, m = map(int, sys.stdin.readline().split())
paperlist = list(map(int, sys.stdin.readline().split()))
checklist, cnt = [0]*n, 0
checklist[m] = 1 #1
while True:
if paperlist[0] == max(paperlist): #2
cnt += 1 #3
if checklist[0] != 1: #4
del paperlist[0]
del checklist[0]
elif checklist[0] == 1: #5
print(cnt)
break
else:
paperlist.append(paperlist.pop(0)) #6, 7
checklist.append(checklist.pop(0))
#1 : 원하는 우선순위를 1로 표시
#2 : 가장 앞의 숫자가 가장 큰 숫자라면 내보낼것이기 때문에 cnt +1
#4 : 맨 앞의 숫자가 웒하는 우선순위를 가진 숫자가 아닌 경우 printlist와 checklist에서 모두 지워준다.
#5 : 두 리스트가 일치한다면 cnt를 출력하고 반복문탈출
#6, 7 : 앞의 요소를 빼서 맨뒤에 넣는 작업
#7에서 del checklist[0]으로 적어도 된다.
조건이 조금 복잡하면 알것같은데 쩔쩔 맨다. 아직 멀은것 같다.
다른풀이) 22.08.06 추가
리스트 2개를 deque로 만들어서 풀이
from collections import deque
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n, m = map(int, sys.stdin.readline().split())
q = deque(list(map(int, sys.stdin.readline().split())))
check = deque([0]*n)
check[m] = 1
cnt = 0
while True:
if q[0] == max(q):
cnt += 1
if check[0] == 1:
print(cnt)
break
else:
q.popleft()
check.popleft()
else:
q.append(q.popleft())
check.append(check.popleft())
풀이2)
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n, m = map(int, sys.stdin.readline().split())
arr = list(map(int, sys.stdin.readline().split()))
answer = []
tmp = [ 0 ] * len(arr)
tmp[m] = 1
answer2 = []
while len(arr) != 0:
if max(arr) != arr[0]:
arr.append(arr.pop(0))
tmp.append(tmp.pop(0))
elif max(arr) == arr[0]:
answer.append(arr.pop(0))
answer2.append(tmp.pop(0))
for i in range(len(answer)):
if answer2[i] == 1:
print(i+1)
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 2805 파이썬(python) : 나무 자르기 - (★) (0) | 2022.07.05 |
---|---|
[백준] 2108 파이썬(python) : 통계학 - Counter함수 (0) | 2022.07.05 |
[백준] 1929 파이썬(python) : 소수 구하기 - (에라토스테네스의 체) (0) | 2022.07.05 |
[백준] 1654 파이썬(python) : 랜선 자르기 - (★) (0) | 2022.07.05 |
[백준] 11866 파이썬(python) : 요세푸스 문제 0 (0) | 2022.07.04 |