SWEA 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (Python, Queue, D3)

전승재·2023년 10월 14일
0

알고리즘

목록 보기
61/88

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

문제 접근

1사이클은 1감소, 2감소, 3감소, 4감소, 5감소이다.
가장 왼쪽에 수만 계산하여 뒤에 append한다.
가장 왼쪽에 수가 계산했을 때 0이하가 된다면 계산을 그만하고 0을 추가한 후 종료한다.

문제 풀이

Queue 사용

nums라는 queue에 입력받고 cnt의 초기값은 1로 설정한다.
그 이후 무한반복문을 실행하면서 nums의 가장 왼쪽값을 pop하여 계산한 후에 다시 이 값을 append하는 것을 기본으로 하고 문제를 푼다.

nums = deque(map(int,input().split()))
    cnt = 1
    while 1:
        num = nums.popleft() # 가장 왼쪽 숫자 pop
        num-= cnt # cnt만큼 감소

사이클 계산

cnt를 1 증가시키고 6이 된다면 다시 cnt를 1로 바꿔준다. 이렇게 되면 1 사이클이 진행된것.

cnt+=1 # cnt 1증가
if cnt==6: # cnt가 6이 됐다면 다시 1로 바꾸어 1사이클 종료
	cnt = 1

0이하가 됐을 때 처리

0이하면 nums 큐에 0을 추가하고 무한반복문을 종료한다.

if num<=0: # 0이하라면 0을 추가하고 반복문 종료
    nums.append(0)
    break

제출 코드

from collections import deque
T = 10
for _ in range(10):
    test_case = int(input())
    nums = deque(map(int,input().split()))
    cnt = 1
    while 1:
        num = nums.popleft() # 가장 왼쪽 숫자 pop
        num-= cnt # cnt만큼 감소
        cnt+=1 # cnt 1증가
        if cnt==6: # cnt가 6이 됐다면 다시 1로 바꾸어 1사이클 종료
            cnt = 1
        if num<=0: # 0이하라면 0을 추가하고 반복문 종료
            nums.append(0)
            break
        nums.append(num) # 그게 아니라면 감소한 num 다시 nums에 append
    print(f'#{test_case}', end=" ")
    for i in range(8):
        print(f'{nums[i]}', end=' ')
    print()
        

0개의 댓글