SWEA 5120 암호

IngCoding·2022년 4월 8일
1

파이썬 #1 알고리즘

목록 보기
22/27

문제출처 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
profile
Data & PM

0개의 댓글