코딩테스트/SWExpertAcademy

회전 Python(SW Expert Academy)

멍토 2020. 3. 28.

난이도 : D2

문제번호 : 5097

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/learn/course/subjectDetail.do?courseId=AVuPDN86AAXw5UW6&subjectId=AWOVIoJqqfYDFAWg

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

N개의 숫자로 이루어진 수열이 주어진다.

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

입력

첫 줄에 테스트 케이스 개수 T가 주어진다.  1<=T<=50

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

출력

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

예시

입력 출력

3
3 10
5527 731 31274
5 12
18140 14618 18641 22536 23097
10 23
17236 31594 29094 2412 4316 5044 28515 24737 11578 7907

#1 731
#2 18641
#3 2412

2. 문제풀이

반복문을 이용하여 앞에서 꺼내서 뒤에서 넣고

마지막에 처음원소를 출력하면 풀리는 간단한 문제였다.

 

그렇지만 우리는 문제를 풀면 되는거 아닌가?

속도를위해 Mod 연산과 남은 수를 이용하여 쉽게 계산했다

큐의 길이가 N이라고 할때 1번이든 N+1이든 상태는 똑같다.

따라서 움직이는 횟수를 크기로 나머지 연산을 해준다.

 

여기서 반복문을 이용하여 이동시킬 수 도 있지만

그냥 그값 자체로 인덱스 접근을 하면 정답이 나온다.


3. 소스코드

1
2
3
4
5
6
7
8
# D2 5097 회전
for t in range(11+int(input())):
    N, count = map(int, input().split())
    queue = input().split()
    # N번 반복하면 원상태이므로 나머지 연산
    count %= N
    #남은것은 인덱스가 된다.
    print('#{} {}'.format(t, queue[count]))

댓글

💲 광고입니다.