문제
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 |