코딩테스트/SWEA

[Python, 파이썬] SWEA 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

알코딩 2024. 10. 16. 00:22

숫자 N개를 입력받아 암호화 작업을 마친 결과물을 구하는 문제.

 

 

- 8개의 숫자를 입력 받는다.

- 첫 번째 숫자를 1, 2, 3, 4, 5 각각 감소시켜 맨 뒤로 보낸다.

 

이와 같은 작업을 암호화 작업의 한 사이클이라 한다.

이 사이클을 계속 돌려서 0보다 작아지는 경우 0으로 유지되며, 바로 프로그램을 종료.

이 때의 8자리의 숫자 값이 암호가 된다.

 

 

 

from collections import deque

T = 10 # 테스트케이스 수 10개

for test_case in range(1, T+1):

    test_case = int(input()) # 테스트케이스 번호

    # 암호 배열 입력받기
    core = deque(map(int, input().split()))

    print(core[-1])

    while(core[-1] > 0):

        for i in range(1, 6):
            core[0] = core[0] - i # 숫자 감소
            core.rotate(-1) # 왼쪽으로 1칸 rotate

            if(core[-1]<= 0): # 0 이하일 시
                core[-1] = 0 # 0으로 설정
                break
            
    print("#%d %s" %(test_case, ' '.join(map(str,core))))    
 

 

 


[문제풀이]


 

deque의 rotate 함수를 쓰면 아주 쉽게 풀린다.

 

while문으로 숫자 0을 발견할 때까지 계속 돌린다.

이 안에 암호화 사이클을 돌리는데, for문을 사용해 각각 숫자 감소 시켜준 후 왼쪽으로 1칸 이동시켜 맨 뒤로 숫자를 보낸다.

core[0] = core[0] - i # 숫자 감소
core.rotate(-1) # 왼쪽으로 1칸 rotate
 

이후 0 이하를 발견할 시 0으로 설정해주고 암호화 작업을 마친 결과물이 바로 정답!