난이도 : D2
문제번호 : 5097
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
N개의 숫자로 이루어진 수열이 주어진다. 맨 앞의 숫자를 맨 뒤로 보내는 작업을 M번 했을 때, 수열의 맨 앞에 있는 숫자를 출력하는 프로그램을 만드시오. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1<=T<=50 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 번호를 출력한다. |
예시
입력 | 출력 |
3 |
#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(1, 1+int(input())):
N, count = map(int, input().split())
queue = input().split()
# N번 반복하면 원상태이므로 나머지 연산
count %= N
#남은것은 인덱스가 된다.
print('#{} {}'.format(t, queue[count]))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
노드의 거리 Python(SW Expert Academy) (0) | 2020.03.30 |
---|---|
피자굽기 Python(SW Expert Academy) (0) | 2020.03.29 |
늘어지는 소리 Python(SW Expert Academy) (0) | 2020.03.27 |
재미있는 오셀로 게임 Python(SW Expert Academy) (0) | 2020.03.26 |
세상의 모든 펠린드롬 Python(SW Expert Academy) (0) | 2020.03.25 |
댓글