문제
https://www.acmicpc.net/problem/1966
풀이
[내 코드]
from collections import deque
import sys
input=sys.stdin.readline
n = int(input())
for _ in range(n):
a,b=map(int,input().split())
arr = deque(map(int,input().split()))
index=b #1
cnt=0
while True:
x = arr.popleft() #2
if not arr: # 3
print(cnt+1)
break
if x < max(arr): #4
arr.append(x)
if index==0: index=len(arr)-1
else: index-=1
else:
if index==0: #5
print(cnt+1)
break
else: #6
cnt+=1
index-=1
- index는 출력해야하는 원소의 위치, cnt는 출력한 개수이다.
- 덱을 popleft()하여 제일 첫번째 원소를 x에 저장한다.
- 만약 arr 이 비었으면 x가 0번째 순서였으므로 cnt+1을 출력해준다.
- 첫번째 원소 x와 남아있는 arr의 최댓값을 비교해준다. arr에 x보다 더 큰것이 있으면 x를 arr에 append하고 index도 -1을 해주어야한다. 이때 index가 0이면 len(arr)-1을 해준다.
- arr에 x보다 큰 원소가 없으면 cnt를 올려줘야한다. 이때 index가 0이면 cnt+1를 출력하며 break해준다.
- 인덱스가 0이 아닐경우 cnt를 1 더해주고 index에는 1을 빼준다.
[다른사람 코드]
t = int(input())
for i in range(t):
n, m = map(int, input().split())
s = list(map(int, input().split()))
s_ = [0 for i in range(n)]
s_[m] = 1
cnt = 0
while True:
if s[0] == max(s):
cnt += 1
if s_[0] == 1:
print(cnt)
break
else:
del s[0]
del s_[0]
else:
s.append(s[0])
del s[0]
s_.append(s_[0])
del s_[0]
다른사람 코드도 들고와봤다.
내 코드와 다른점은
- 몇번째로 인쇄되었는지 궁금한 문서의 위치를 index 변수말고 s_리스트로 선언
- 리스트에서 처음것을 pop하지 않고 바로 max와 비교
느낀점
이 문제 프로그래머스에서 푼적있다!
https://programmers.co.kr/learn/courses/30/lessons/42587
7월달에 푼건데.. 어떻게 실력이 하나도 안늘수가 있지?.. 어렵다고 안느껴져서 다행이라고 생각해야할까 .. 왜 내 코드는 짧아지지가 않을까
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #5430 - AC (백준 숏코딩 풀이 첨부) (0) | 2021.12.11 |
---|---|
[Python] 백준 #1021 - 회전하는 큐 (0) | 2021.12.11 |
[Python] 백준 #1152 - 단어의 개수 (1) | 2021.12.08 |
[Python] 백준 #1157 - 단어 공부 (1) | 2021.12.08 |
[Python] 백준 #2675 - 문자열 반복 (1) | 2021.12.08 |