개발 공부~

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

코딩테스트/SWEA

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

머밍 2024. 7. 8. 17:42

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&passFilterYn=Y&contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=P&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com

문제

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

  • 8개의 숫자를 입력 받는다.
  • 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.

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

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

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

 

제약 사항

  • 주어지는 각 수는 integer 범위를 넘지 않는다.
  • 마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.

입력

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

출력

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

 

Solution

한 사이클마다 5번 반복된다. 한 사이클 안에서 수행한 결과가 0보다 작으면 종료하고 그때의 리스트 값을 다 출력해야한다.
맨 처음을 검사하기 때문에 pop(0)으로 구현하였고 결과가 0보다 작을 땐 맨 뒤에 append했다.

for test_case in range(1, 11):
    N = int(input())
    numbers = list(map(int, input().split()))

    while True:
        for i in range(1, 6):
            n = numbers.pop(0)-i
            if n <=0:
                n =0
                numbers.append(n)
                break
            else:
                numbers.append(n)
        if numbers[-1] ==0:
            break

    print(f'#{test_case}', end=" ")
    print(*numbers)