[SWEA] 1225 암호생성기

Yujin Jo·2022년 3월 9일
0

SWEA

목록 보기
1/22
post-thumbnail

문제 출처 : [SWEA] 1225 암호생성기

문제

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

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

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

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

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

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

제약 사항

주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.

입력

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

출력

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

코드

# tc가 10개만 주어지기 때문에 1~10까지 범위 설정
for tc in range(1, 11):
    N = int(input())
    code = list(map(int, input().split()))
    flag = 0    # 반복문 탈출을 위한 변수 초기화

    while code:
        # i를 숫자에서 빼주기 위해서 1~5까지 반복하도록 설정
        for i in range(1, 6):
            n = code.pop(0)     # code의 첫번째 값을 pop
            if n - i <= 0:      # 해당 값에서 i를 뺀 값이 0이거나 0보다 작으면
                code.append(0)  # 0을 append 하고
                flag = 1        # 반복문에서 탈출하도록 설정
                break
            code.append(n - i)  # 그 외의 경우 n-i를 append
        if flag:
            break

    print(f'#{tc}', *code)


풀이 방법

FIFO(first in first out)이라는 특징을 가지고 있는 큐를 활용해서 코드를 작성해보려고 pop(0)를 활용했다.
리스트의 첫번째 값부터 꺼내서 암호 생성 규칙에 따라 i값을 빼주고 리스트의 마지막에 추가해줬다.

profile
일단 해보자

0개의 댓글