미소를뿌리는감자의 코딩
[백준 2024/02/06] 1966번 프린터 큐 본문
https://www.acmicpc.net/problem/1966
1. 접근 방법
여기서, 구하고자 하는 것은 n 번째 index가 몇 번째로 출력하는가 이다.
중요도가 1 이상 9 이하의 정수라는 점에 주목했다. n 번째 index의 중요도를 0으로 대치시켜 놓고, temp 변수에 n 번째 index의 중요도를 따로 저장해 두었다. 구하고자 하는 종이를 0으로 특별히 하이라이트 한 느낌..!
temp = 0
numbers[want], temp = temp, numbers[want]
n개의 문서 중요도는 numbers라는 list에 저장해두었다.
while 문
이후 numbers[0] 이 (맨 앞에 있는 종이의 중요도가)
1. 중요도가 0 인지 (구하고자 하는 종이인지)
2. max(numbers)< temp 인지, 즉, 구하고자 하는 n 번째 종이의 중요도가 다른 max(numbers)보다 높은지
(이를 고려해주는 이유는, n 번째 문서의 중요도를 0 으로 바꾸었기 때문이다)
를 통해서, while 문을 돌렸다.
-> 두 경우가 참인 경우는, 구하고자 하는 문서가 맨 앞에 와있으며, 중요도도 다른 list에 남아있는 최댓값보다 큰 경우이다.
pop vs. pop and append
1)만약 numbers의 최댓값이 맨 앞에 있는 종이의 중요도와 같지 않은 경우
2) 맨 앞에 있는 중요도와 numbers의 최댓값이 같지만, temp 보다 작은 경우 (구하고자 하는 종이의 중요도 보다 낮은 경우)
pop을 한 후, list의 맨 뒤에 append 해주었다.
두 경우에 해당하지 않은 경우는, 맨 앞에 있는 종이의 최댓값이 max(numbers)과 같으며, temp 중요도 보다 큰 경우에 해당한다.
즉, 출력 대상이 되는 경우이다.
2. 코드
def st():
temp = 0
turn = 0
papers, want = map(int, input().split())
numbers = list(map(int, input().split()))
numbers[want], temp = temp, numbers[want]
while(numbers[0]!=0 or temp<max(numbers)):
#print(numbers)
max_c = max(numbers)
popped = numbers.pop(0)
if max_c!=popped or max_c<temp:
numbers.append(popped)
else:
turn +=1
#print(turn)
turn+=1
return turn
num = int(input())
for i in range(num):
print(st())
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/02/07] 17219번 비밀번호 찾기 (0) | 2024.02.07 |
---|---|
[백준 2024/02/07] 1920번 수 찾기 - python ver. (1) | 2024.02.07 |
[백준 2024/02/06] 9012번 괄호 - python ver. (0) | 2024.02.06 |
[백준 2024/02/05] 10809번 알파벳 찾기 (1) | 2024.02.05 |
[백준 2024/02/01] b1271 엄청난 부자2 (0) | 2024.02.01 |