[SWEA] 1225 - 암호생성기

ttaho·2022년 11월 16일

SWEA

목록 보기
26/38

문제

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

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

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

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

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

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

[제약 사항]

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

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

[입력]

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

[출력]

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

풀이

리스트의 순서를 바꿔야 하므로 원형 큐를 사용한다.
길이가 8인 큐 이므로 front=0, rear=7로 설정하고, Q[front]의 값을 1~5씩 감소시킨후 맨뒤로 보내기위해 각 연산마다 front와 rear를 1씩 증가시킨다. 원형큐 이므로 나머지 연산을 사용하여 front,rear값을 정한다. 연산 후 rear에 있는 값이 음수거나 0이면 반복문을 종료시키고, 암호문을 출력한다.

코드

for _ in range(10):
    test_case = int(input())
    Q = list(map(int,input().split()))
    front = 0
    rear = 7
    while Q[rear]:
        for i in range(1, 6):
            Q[front] -= i
            front = (front+1) % 8
            rear = (rear+1) % 8
            if Q[rear] <= 0:
                Q[rear] = 0
                break
    a = Q[front:] + Q[:rear+1]
    print(f'#{test_case}', end=" ")
    for i in a:
        print(i, end=" ")
    print()

profile
SW Engineer

0개의 댓글