개발 공부용

큐 | 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 본문

코딩 테스트

큐 | 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

솝제로 2025. 11. 10. 12:28
문제

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

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

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

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

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

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

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

 

입력
  • 10개의 테스트 케이스
  • 테스트 케이스의 첫 줄은 테스트 케이스 번호
  • 두번째 줄은 8개의 데이터
1
9550 9556 9550 9553 9558 9551 9551 9551
2
2419 2418 2423 2415 2422 2419 2420 2415

 

 

출력
  • #테스트케이스번호 테스트 케이스의 답
#1 6 2 2 9 4 1 3 0
#2 9 7 9 5 4 3 8 0

 

 

풀이
from collections import deque

for i in range(10):
    N = int(input().strip())
    nums = deque(map(int, input().split()))
    
    j = 0
    while True:
    	#1 ~ 5를 순차적으로 빼고 다시 1로 돌아옴
        if j > 4: #j==6부터는 다시 1로
            j = 1
        else: j += 1
        
        #가장 왼쪽의 요소를 pop
        num = nums.popleft()
        if num - j <= 0: #num이 0이하가 되는 경우
            num = 0 #0으로 고정
            nums.append(num) #가장 오른쪽에 append후 종료
            break 
        else:
            num -= j
            nums.append(num)
                      
    result = " ".join(map(str, nums))        
    print(f"#{N} {result}")

 

큐를 이용하면 간단하게 풀 수 있는 문제

1~5를 빼는 것을 반복해야 하므로 if 문으로 j>4 인 경우 다시 1로 돌아가도록 작성

 

가장 왼쪽 요소를 popleft하고 -j 하여 append 한다

-j 한 값이 0이하인 경우 num = 0이 되고 답을 출력한 뒤 해당 테스트 케이스를 종료한다.