큐 란?
일반적으로 우리가 줄서는 모든 곳에 사용이 가능할 것같다 예를 들면 예약 시스템 같은 경우에 스택으로 구현 가능할 것같다.
1.문제
문제를 이해하는게 여전히 어렵다
이해시켜주신 선현님 감사합니다.
일단 문제는 요약해서 말하면
3 몇회실행
1 0 현재 1장 있고 0번째 문서가 언제 출력되나
5 현재 작업해야할 서류들의 중요도
4 2 현재 4장있고 2번째 문서가 언제 출력되나
1 2 3 4 현재 작업해야할 서류들의 중요도(내가 뽑아야할 서류의 중요도는 3이다)
6 0 현재 6장있고 0번째 문서가 언제 출력되나
1 1 9 1 1 1 현재 작업해야할 서류들의 중요도(내가 뽑아야할 서류의 중요도는 1이다)
프린터의 작동방식은
문제에 나와있는거 처럼 가장 앞에있는 문서의 중요도를 확인하고
현재 문서중 가장 높은 중요도를 가지지 않았다면 맨 뒤로 옮기고 가장 높은 중요도라면
프린트 시키는 방법이다.
해서 내가 원하는 문서가 몇번쨰로 출력되는가! 를 구하는게 문제다
2.풀이
num = int(input()) for i in range(num): doc= input().split(" ") imt = deque((int(v), i) for i, v in enumerate(input().split(" "))) count = 0 while imt and len(imt) > 0: if max(imt)[0] == imt[0][0]: count += 1 if imt[0][1] == int(doc[1]): print(count) break else: imt.popleft() else: imt.append(imt.popleft())
한줄씩 풀이 해야할 것같다.
num = int(input()) 입력값을 num 변수에 넣는다
for i in range(num): num 만큼 반복문을 사용한다.
doc= input().split(" ")
두번째로 입력 받은 값을 리스트화해서 doc 에 각 각 보관한다.
imt = deque((int(v), i) for i, v in enumerate(input().split(" ")))
세번째 입력 받은 값을 인덱스와 값을 세트로 배열에 넣어준다.
count = 0 몇번째로 출력 되었는지 파악하기위해 변수를 추가해준다.
while imt and len(imt) > 0: imt 의 갯수가 1개 이상일때만 실행된다.
if max(imt)[0] == imt[0][0]:
imt 의 최대값의[0] 값 부분과 imt[0][0] 첫번쨰 부분의 값이 같은지 확인한다.
count += 1 같다면 count를 하나더해준다.
if imt[0][1] == int(doc[1]):
내가 뽑아야하는 index와 현재 인덱스가 같은지 확인한다.
print(count)일치한다면 해당 count 를 프린트 해주고
break 와일문을 나간다.
imt.popleft()
일치하지 않는다면 현재부분을 뽑아내 준다.
imt.append(imt.popleft())
imt 의 최대값의[0] 값 부분과 imt[0][0] 첫번쨰 부분의 값이 같지 않다면
해당 문서를 가장 뒤로 보내준다.
3.느낀점
오늘 공부하면서 느낀점은
심화과제를 푸는것이 명확한 풀이가 없어서 조금더 파볼수 있어서 좋았다 .
이번엔 문제의 풀이에 대해서 찾아보기 보단 내가 생각한거를 구현하는 방법에대해서 조금더 찾아봤던거 같아서 유익한 시간이였다.