난이도 : D3
문제번호 : 5120
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
A사는 창립기념일 이벤트로 비밀번호 맞추기 대회를 열어, 최대 10개인 비밀번호를 맞추는 사람에게 기념품을 제공하기로 했다. - 1000이하의 숫자 N개가 주어진다. 이때 시작 숫자가 정해지고, 첫 번째 지정 위치가 된다. |
입력
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 6 3 3 6 2 4 9 1 5 5 3 5 958 386 329 169 778 10 4 10 158 606 636 941 686 774 302 375 954 668 |
#1 5 6 1 9 13 4 2 8 6 #2 1736 2514 778 169 667 498 329 715 386 958 #3 826 1494 668 954 375 1052 677 302 774 2234 |
2. 문제풀이
처음에는 간단하게 모듈러 연산으로 구하려고 했는데 위치가 0일때 문제가 생겼다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#D3 5120 암호
for t in range(1, int(input()) + 1):
#숫자 N개, M번째칸 추가, K회 반복
N, M, K = map(int, input().split())
linked_lisd = list(map(int, input().split()))
index = 0
for i in range(K):
index += M
#크기가 길이를 넘어가면 길이만큼 빼준다.
if index > len(linked_lisd):
index -= len(linked_lisd)
# 위치가 0일경우
if not index :
linked_lisd.insert(0, linked_lisd[-1] + linked_lisd[0])
#길이 위치에 있다면 제일마지막에 추가한다.
elif index == len(linked_lisd):
linked_lisd.append(linked_lisd[-1] + linked_lisd[0])
#평범한 경우
else : linked_lisd.insert(index, linked_lisd[index-1] + linked_lisd[index])
#10개가 최대이므로 끊어서 뒤집어준다.
result = reversed(linked_lisd[-10:])
print('#{} '.format(t), end='')
print(*result)
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
화물 도크 Python(SW Expert Academy, SWEA) (0) | 2020.05.21 |
---|---|
컨테이너 운반 Python(SW Expert Academy, SWEA) (0) | 2020.05.20 |
수열 합치기 Python(SW Expert Academy) (0) | 2020.05.18 |
단순 2진 암호코드(SW Expert Academy) (0) | 2020.05.17 |
최대상금 Python(SW Expert Academy) (2) | 2020.05.16 |
댓글