62진법으로 된 숫자를 만들고 61로 나누어 떨어지는지를 알아보는 문제이다.
처음에 문제를 풀 때는, 입력값 전체를 변환하고 더해 구하려는 숫자를 만들고 61로 나누려 헀으나, 시간초과가 났다. 그래서 이것저것 찾아보던 도중,
이것을 찾았다.
이말은, 예를 들어 xyz가 입력으로 들어오면, 원래 구해야 하는 숫자는 (x*62^2)+(y*62^1)+(z*62^0)이지만, 이는 (x*(61+1)^2)+(y*(61+1)^1)+(z*(61+1)^0)로도 쓸 수 있고, (x*(61^2+2*61^1+1^2))+(y*(61+1))+(z*1)이 된다. 이를 나열해보면 x*(61^2)+(2x+y)*(61^1)+(x+y+z)가 된다. 이 식을 61로 나누면 나머지는 x+y+z만 남는다.
즉 전체 숫자를 구할 필요가 없고, 62진법으로 쓰인 수를 10진법으로 변환한 후 그 숫자들만 더한 값이 61로 나누어 떨어지는지 보면 되는 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import sys
while True:
number = list(sys.stdin.readline())
if number == ['e', 'n', 'd', '\n']: # 입력이 end라면 끝내기
break
del number[-1] # \n 지우기
calcnum = []
for i in range(len(number)): # 숫자 변환해서 리스트에 집어넣기
if number[i].isdigit():
calcnum.append(int(number[i]))
if number[i].isupper():
if number[i].islower():
result = 0
for j in range(len(calcnum)): # 결과값
result += calcnum[j]
if result % 61 == 0:
print('yes')
else:
print('no')
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
그래서 코드를 짜보았고,
정답이 떴다.
'코테용 문제풀이 > 알고스팟' 카테고리의 다른 글
알고스팟 yulo 문제 파이썬으로 풀기 (0) | 2019.09.06 |
---|---|
알고스팟 note 문제 파이썬으로 풀기 (0) | 2019.09.05 |
알고스팟 tiling2 문제 파이썬으로 풀기 (0) | 2019.08.26 |
알고스팟 hamming code 문제 파이썬으로 풀기 (0) | 2019.08.22 |
알고스팟 jeonglibe 문제 파이썬으로 풀기 (0) | 2019.08.12 |