코딩테스트/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으로 설정해주고 암호화 작업을 마친 결과물이 바로 정답!