1966번: 프린터 큐
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에
www.acmicpc.net
포스팅전 작은 사담
이번에 코테를 보면서 느낀점은
앞으로 백준문제를 풀때 .py파일로 만들어서 푸는게 코테 대비에 도움이 될것같다였다
전에는 쉘환경에서 백준을 풀었는데 사실 코테환경과는 달랐고 .py환경에서 푸는게 코테환경과 비슷하기때문이다
따라서 앞으로는 .py환경에서 백준을 푸려고 한다
코드
import sys
from collections import deque
input=sys.stdin.readline
for _ in range(int(input())): # 케이스를 받을 횟수
N, M=map(int,input().split()) # N: 문서수, M: 타겟의 위치
nl=deque(list(map(int, input().split()))) # 중요도 배열
# 타겟 위치 표시하기
for i in range(N):
if i == M:
nl[i]=[nl[i], 1]
else:
nl[i]=[nl[i], 0]
# 프린트 시작
printed=0 # 정답임
max_cal=1
while True: # 타겟이 나갈때까지 반복
# 최대값 찾기
if max_cal==1:
max=0
for i in range(len(nl)):
if nl[i][0]>max:
max=nl[i][0]
max_cal-=1
# 프린트 하는상황
if nl[0][0] == max:
printed+=1
if nl[0][1] == 1:
break
else:
nl.popleft() # 출력
max_cal+=1
elif nl[0][0] < max:
nl.append(nl[0])
nl.popleft()
# 케이스별 답 출력
print(printed)
한번에 맞았다
하지만 조금 불만족 스러웠던 부분이 있었는데
최대값을 확인하기위해 반복문을 또 돌려야 했다는점이다
for문이 하나 더 들어갈때마다 숨이 턱막힌다 혹시 시간초과가 날까봐
시간을 너무 넉넉하게 준건지 바로 통과되긴했지만
마침 나보다 효율적으로 푸신분의 코드를 보게 되었고
이분의 코드를 통해 배울점이 있다고 판단 포스팅을 작성하게 되었다
https://www.acmicpc.net/source/48658098
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
queue = list(map(int, input().strip().split()))
queue = [(v, idx) for idx, v in enumerate(queue)]
count = 0
while True:
if max(queue)[0] == queue[0][0]:
count += 1
if queue[0][1] == M:
print(count)
break
else:
queue.pop(0)
else:
queue.append(queue.pop(0))
첫번째로 max부분
난 지금까지 max를 1차원 리스트에서만 사용할수있는줄 알았다
그런데 아니었다
la=[[1,'b'],[2,'z'],[3,'a']]
print(max(la)[0])
위 코드가 된다
내가 어디부분을 비교할것인지 알려주기만 하면된다
파이썬 만세! for문을 여기서 하나 덜 쓸수있었다
두번째로 enumerate부분
나는 목표로 하는 문서를 표시하기위해 for문하나를 사용했다
그런데 enumerate를사용하는게 더 뭐랄까 세련되보인다고할까
la=['b','z','a']
la = [(v, idx) for idx, v in enumerate(la)]
print(la)
세번째로 뒤로 넣기 부분이다
큐 문제에서 많이 보이는 패턴중 하나가
가장 앞에 있는 요소를 뒤로 넣기 이다
나는 그럴때 append해준뒤 pop해주는 방식을 사용했는데
그걸 한줄로 끝낼수있다는걸 알게되었다
la=['b','z','a']
la.append(la.pop(0))
print(la)
색종이 만들기 파이썬 (0) | 2022.10.06 |
---|---|
백준 5430번 AC 파이썬 (0) | 2022.09.20 |
코테 만점을 맞다 (0) | 2022.09.02 |
백준 큐 2 파이썬 (0) | 2022.08.30 |
백준 오큰수 파이썬 (0) | 2022.08.28 |