📖 [D3] 1225.[S/W 문제해결 기본] 7일차 - 암호생성기 D3 파이썬
다음 주어진 조건에 따라 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
.......
✍ <구현>
수건으로 머리를 말릴 때,
1) 머리를 두고 수건을 움직여서 닦느냐?
2) 수건을 가만히 두고 머리를 움직여서 닦느냐?
두가지 방식이 있다고 한다.
문제에서 나온 설명대로 구현 할 수 도 있겠지만
저 그림대로 빼고 뒤로, 빼고 뒤로, 빼고 뒤로...를 하지 않고
약간의 게으름을 부려 생각해봤을 때, 다 뺀 뒤에 그것을 다시 정렬하면 되지 않을까?
라고 생각이 들었다. 출력의 경우를 보면 0이 제일 뒤로 나오는 형태만 어찌어찌 하면 되니. 오케이!
(1)단계
우선 리스트를 차례차례 훑으며
1,2,3,4,5,1,2,3 빼고
4,5,1,2,3,4,5,1 빼고
... 어디에서 뺀 값이 0이 나올때까지 해준다.
(2)단계
그 뒤 남은 리스트에서 0 나온 것이 맨 뒤로 가주도록 그때 정렬 해준다.
💡 <코드 설명>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# 1225.[S/W 문제해결 기본] 7일차 - 암호생성기 D3
# 2020.02.27
# 시간 : 60분 (해석및연습:10분,설계및구현:40분)
import sys
# T = int(input()) # 테스트케이스 T
for _ in range(10):
t = int(input())
arr = list(map(int,input().split()))
# (1). 1 2 3 4 5 빼주기 어느 하나라도 0이 될때까지
cnt = 1
while True: # 0 not in arr
flag = False
for i in range(len(arr)):
arr[i] -= cnt
cnt += 1
if cnt > 5:
cnt = 1
if arr[i] <= 0:
arr[i] = 0
flag = True
break
if flag:
break
# (2). 0 이 제일 뒤로가도록 자리
while arr[-1]!=0:
print('#{}'.format(t),*arr)
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
👀 후기 )
며칠 전에 배운 Flag 로 While문을 끝내 보았는데,
While 0 not in arr 하면 arr 안에 0 값이 들어가면 저절로 끝날 수도 있었다.
반복의 상황에서는 괜히 while을 쓰다 무한루프에 빠질까봐 for 문을 많이 사용하였는데,
반복의 횟수를 알면 for문을 쓰지만 모르는 경우는 While문이 유용하다.
<Break 의 특징>과 <Break가 되는 상황 조건>을 확실히 알아두면 무한루프에 갇히지 않는다.
* Break는 가까운 반복문 (for문 / while문)을 하나씩 벗긴다고 생각한다. if 문을 벗어나는게 아니다.
어느 선에 Break를 거냐에 따라 어느 반복문을 탈출하는지 차근차근 익히며 연습하는게 포인트~
한번에 하나씩 벗겨진다. 두번 벗어나려면 두번 break 해줘야 한다.
'코딩테스트 \파이썬\자바 > SWEA D3' 카테고리의 다른 글
[SWEA] 5110. [파이썬 S/W 문제해결 기본] 7일차 - 수열 합치기 D3 파이썬 (0) | 2020.04.11 |
---|---|
[SWEA] 5108. [파이썬 S/W 문제해결 기본] 7일차 - 숫자 추가 D3 파이썬 (0) | 2020.04.09 |
[SWEA][D3] 5099. [파이썬 S/W 문제해결 기본] 6일차 - 피자 굽기 D3 (0) | 2020.04.02 |
[SWEA][D3] 4676. 늘어지는 소리 만들기 D3 파이썬 (0) | 2020.03.11 |
[SWEA][D3] 6485 . 삼성시의 버스 노선 (0) | 2020.02.26 |