Tiny Bunny
본문 바로가기
Algorithm/Python

[SWEA #11649] 큐 - 회전

by nowag 2024. 2. 15.

문제

N개의 숫자로 이루어진 수열이 주어진다. 맨 앞의 숫자를 맨 뒤로 보내는 작업을 M번 했을 때, 수열의 맨 앞에 있는 숫자를 출력하는 프로그램을 만드시오.

입력
첫 줄에 테스트 케이스 개수 T가 주어진다.  1<=T<=50
다음 줄부터 테스트 케이스의 첫 줄에 N과 M이 주어지고, 다음 줄에 10억 이하의 자연수 N개가 주어진다. 3<=N<=20, N<=M<=1000,

출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다.

 

내가 쓴 코드

def isEmpty():
    return front == rear
def isFull():
    return (rear + 1) % (N + 1) == front

def enQueue(item):
    global rear
    if isFull():
        pass
    #     print('Queue is full')
    else:
        rear = (rear + 1) % (N + 1)
        Q[rear] = item

def deQueue():
    global front
    if isEmpty():
        pass
    #     print('Queue is empty')
    else:
        front = (front + 1) % (N + 1)
        return Q[front]

T = int(input())
for t in range(T):
    N, M = map(int, input().split())    # N : 리스트 크기, M : 이동 횟수
    arr = list(map(int, input().split()))

    num = M % N     # 실질적 이동 횟수

    Q = [0] * (N + 1)     # 원형 큐 생성
    front = rear = 0

    # 큐에 입력 값 넣기
    for a in arr:
        enQueue(a)

    # 맨 앞 숫자를 맨 뒤로 보내기
    for n in range(num):
        d = deQueue()
        enQueue(d)

    print(f'#{t+1} {Q[front+1]}')

위에 정의한 함수 4개는 원형 큐 구현에서 설명해주신 코드 가져와서 쓴 것이고.. 

진짜 내가 쓴 코드는 그 아래! 이당!!

완~전 간단해보였는데, 막상 해보니까 답이 안나오고 자꾸 이상한 게 나와서,, 중간중간 print 넣어서 계속 돌려봤당. 그래서 끝내 규칙을 찾아 정답을 찾아냈다는!!

 

사실 이 문제는 위의 함수 중에 isEmpty(), isFull() 다 넣을 필요도 없는 enQueue(), deQueue()만 구현해보는 문제인 것 같당.. 내 옆에 앉은 귀여운 동생이 물어봐서 친절히 알려주고 왔당 :) 넘 기여웡 ㅎㅎㅎ

 

출력 결과

728x90
반응형

'Algorithm > Python' 카테고리의 다른 글

[BOJ #9506] 약수들의 합  (2) 2024.02.15
[BOJ #10828] 스택  (3) 2024.02.15
[BOJ #2738] 행렬 덧셈  (1) 2024.02.15
[BOJ #10818] 최소, 최대  (3) 2024.02.14
[BOJ #1935] 후위 표기식 2  (1) 2024.02.14