코딩테스트/SWExpertAcademy

암호생성기 Python(SW Expert Academy)

멍토 2020. 3. 19.

난이도 : D3

문제번호 : 1225

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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

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

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

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

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

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

제약사항

주어지는 각 수는 integer 범위를 넘지 않는다.

마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.

입력

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 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
.......

2. 문제풀이

문제는 어렵지 않은데 이해를 잘못하여 고생했던 문제였다.

저는 한사이클이 모든 수를 1~8까지 감소시키는 거라고 생각했는데

1~5가 한사이클이었다.

꺼내서 숫자를 깍는데 제일 앞의 숫자를 꺼낸다.

숫자를 감소시키고 나서 제일 뒤에 넣어준다.

0보다 작다면 0으로 바꿔주고 암호생성을 멈춘다.

 


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#D3 1225 암호생성기
= 10
for t in range(1, T+1):
    input()
    password = list(map(int, input().split()))
    i = 1
    while True:
        a = password.pop(0- i
        #0보다 작아지면 0으로 바꿔준다.
        if a < 0: a = 0
        password.append(a)
        #마지막 숫자가 0이 되었다면 그암호가 되므로 반복문 종료
        if a <= 0: break
        i += 1
        #한사이클은 5까지이므로 숫자 갱신
        if i > 5: i = 1
    print('#{} '.format(t), end='')
    print(*password)

댓글

💲 광고입니다.