SWEA 5120 암호
문제출처 SW Expert Academy
문제의 저작권은 SW Expert Academy에 있습니다.
문제소개
최대 10개인 비밀번호를 찾는 프로그램을 작성하시오.
- 1000 이하의 숫자 N개가 주어지는데, 시작숫자가 첫번째 지정 위치가 된다.
- 지정 위치로부터 M칸 뒤에 빈칸을 추가하고, 앞뒤의 숫자를 더해서 넣는다.
- M칸 이동 중 맨 끝에 이르면 그 다음은 맨 앞이 된다.
- 숫자가 추가된 칸이 새로운 지정 위치가 된다. 이 작업을 K번 반복한다.
- 마지막 숫자부터 역순으로 출력하면 비밀번호가 된다. 10개까지만 출력한다.
입력:
1
6 3 3 (N, M, K 6개의 숫자, 3칸 뒤, 3회 반복)
6 2 4 9 1 5
출력:
#1 5 6 1 9 13 4 2 8 6
풀이접근
- 합칠 수열의 첫글자를 뽑아서 기존 수열과 비교해서 들어갈 인덱스 찾기
- 큰 숫자가 없으면 맨 뒤에 붙이기 (for문과 if문 활용)
- 수열이 다 합쳐지면 으로 뒤에서부터 역순으로 10개 추출
코드
for tc in range(1, int(input()) + 1):
N, M, K = map(int, input().split()) # N개의 숫자, M칸 뒤, K회 반복
array = list(map(int, input().split()))
index = M # M칸 씩 이동한 뒤 index
for _ in range(K): # 수열갯수만큼 반복
index %= N # 현재 인덱스를 N으로 나눈 뒤 나머지
if not index: # index가 0 (index == N)
array.append(array[-1]+array[0]) # 마지막숫자 + 시작숫자
index -= 1 # 이 경우엔 index -1 (이래야 리스트 요소 하나 추가된게 반영됨)
else: # 평범한 경우
array.insert(index, array[index-1]+array[index])
N += 1 # 리스트 요소 하나 추가
index += M # M칸 뒤로 이동
print(f'#{tc}', end=' ')
print(*array[-10:][::-1]) # 뒤에서부터 역순으로 출력
1
6 3 3
6 2 4 9 1 5
#1 5 6 1 9 13 4 2 8 6
정의된 변수 값 확인
array
[6, 8, 2, 4, 13, 9, 1, 6, 5]
index
4
print(N,M,K)
9 3 3
Author And Source
이 문제에 관하여(SWEA 5120 암호), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wltn39/SWEA-5120-암호저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)