[SWEA] 1225_암호생성기

김태민·2021년 9월 1일
0

알고리즘

목록 보기
17/77

mingssssss

1. 문제

다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.

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

  • 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.

다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.

이와 같은 작업을 한 사이클이라 한다.

  • 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.

[제약 사항]

주어지는 각 수는 integer 범위를 넘지 않는다.

마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.

[입력]

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.

[출력]

#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.

2. 코드

import sys
sys.stdin = open('input.txt')

def m_code():
    while arr[-1] > 0:  # arr의 맨 마지막 값이 0이면 암호 완성이므로 종료
        for i in range(1, 6):  # 5번 돌릴 범위 설정
            if arr[0] - i <= 0:  # arr[0] 값에서 i를 뺀 값이 0보다 작거나 같으면
                arr.pop(0)  # arr[0] 값을 지우고, 
                arr.append(0)  # 0 값을 append 해준다.
                break
            else:
                arr.append(arr.pop(0) - i)  # 이외에 조건에는 arr[0]을 pop 해서 i만큼 빼준다.
    return print('#{}'.format(tc+1), *arr)  # 결과 출력


for tc in range(10):
    N = input()
    arr = list(map(int, input().split()))
    m_code()

3. 리뷰

한 사이클이 언제 종료되는지 조건을 잘 설정하고 다음 사이클을 돌리면
쉽게 풀 수 있었던 문제였다.

profile
어제보다 성장하는 개발자

0개의 댓글