문제 출처 : [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값을 빼주고 리스트의 마지막에 추가해줬다.