한동안 알고리즘을 건드리지 않았다. 좀더 효율적인 코딩을 요구하는 작업들을 함에 따라 백준 새로운 계정을 만들고 문제들을 서서히 풀어 나갔다. 아침에 1교시 수업을 기다리며 1110번 문제를 풀어보았다. 막힘은 없었다. 잘 풀리겠지 하면서 말이다. 우선 1110번의 문제는 다음과 같다.
주어진 예시 입력과 출력값들은 다음과 같은것들이 있다.
필자가 초반에 작성한 코드는 다음과 같다.
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
|
global b
global value
global cycle
cycle = 0
value = 0
def add_zero(num):
return "0" + num
#try:
a = int(input())
if a < 0 and a >= 99:
exit()
#except TypeError:
# exit()
while a != value:
if cycle == 0:
b = None
b = str(a)
if a < 10:
b = add_zero(b)
elif cycle != 0:
b = str(value)
if value < 10:
b = add_zero(b)
middle = int(b[0]) + int(b[1])
final = str(b[1]) + str(middle)[-1]
value = int(final)
cycle += 1
print(cycle)
|
cs |
이 코드를 작성한 결과는 아주 처참했다. 여러번 시도해 보았고 여러가지 틈틈히 수정도 해보았다.
멘탈이 갈렸었다 그 이유는 다음과 같이 결과도 아주 잘나왔기 때문이다.
주어진 값들은 잘만나왔다. 96%에서 멈춰서 틀렸습니다로 바뀌는걸 볼때마다 멘탈이 갈렸다. 그래서 처음에는 문제 첫줄에 주어진 0~98까지 for문 돌려서 검사해볼까도 생각해 보았는데, 이게 아이디어를 주었다. 우연히 0을 넣어보았다. 값이 0이 나왔다. 다시 생각해보니 뭔가 이상했다. 0의 규칙에 의한 최종값은 당연히 0이 나온다. 하지만 이상했던 것은 최소한 한번 돌았다면 cycle값이 0이 되어야 하지 않는가? 근데 이상하게도 0이나온다.
코드를 다시 보니 while문 조건에 처음 입력값인 a값과 value(한 루프에서 나오는 결과값 저장 변수)가 같은 경우에 while문을 끝나게끔 처리를 해주었는데, value를 전역변수 처리와 0으로 초기화를 하였기 때문에 당연히 입력을 0을 하면 while루프를 돌지 않으면서 cycle값이 0으로 출력되는 것이다. 그렇기 때문에 value변수의 초기화값을 0이 아닌 임의의값 -1로 바꾸어 주고 나서 다시 제출한 결과 맞았다고 나왔다.
최종 코드는 다음과 같다. 바뀐거는 초반 변수 value의 초기값을 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
|
#10보다 작으면 앞에 0을 붙여 두자리 수로 만들고 각자리 숫자를 더한다.
global b
global value
global cycle
cycle = 0
value = -1
def add_zero(num):
return "0" + num
#try:
a = int(input())
if a < 0 and a >= 99:
exit()
#except TypeError:
# exit()
while a != value:
if cycle == 0:
b = None
b = str(a)
if a < 10:
b = add_zero(b)
elif cycle != 0:
b = str(value)
if value < 10:
b = add_zero(b)
middle = int(b[0]) + int(b[1])
final = str(b[1]) + str(middle)[-1]
value = int(final)
cycle += 1
print(cycle)
|
cs |
결론 : 문제 다시 차근차근 보고 다시 천천히 이해하자.
'CS 지식 > Algorithm-Problem Solving 정리' 카테고리의 다른 글
1712 손익분기점 python3 (0) | 2020.10.12 |
---|---|
BOJ 1929 소수 구하기 Python3 (0) | 2020.02.09 |
BOJ 11728 배열합치기 Python3 (0) | 2020.02.09 |
BOJ 1978 소수찾기 Python3 (0) | 2020.02.09 |
백준 온라인 저지 2108 문제풀이 with Python3 (0) | 2020.01.02 |