
풀이
숫자들을 입력받은 후 앞에 가중치를 곱한 후 전부 더하고 10으로 나눈 뒤 나머지가 0이 되도록 하는 m을 찾으면 되는
간단한 문제이다.
마지막 자리는 맞춰주는 숫자 m이기 때문에 가중치를 곱하면 안된다.
손상된 * 위치를 찾은 후 손상된 위치에 올 수 있는 숫자를 찾으면 된다.
코드
import sys
input = sys.stdin.readline
isbn = input().rstrip()
weight = []
for i in range(12):
if i % 2 == 0:
weight.append(1)
else:
weight.append(3)
damaged = isbn.index('*')
total = 0
for i in range(12):
if i == damaged:
continue
total += int(isbn[i]) * weight[i]
for j in range(10):
tmp = total + j * weight[damaged]
m = int(isbn[-1])
if (tmp + m) % 10 == 0:
print(j)
break
코드해설
가중치를 적어둘 weight 리스트를 만든 후, 짝수면 1, 홀수면 3을 넣는다.
weight = []
for i in range(12):
if i % 2 == 0:
weight.append(1)
else:
weight.append(3)
이후 손상된 *를 찾는다.
damaged = isbn.index('*')
이후 총합을 계산한다. isbn[i]는 문자열이기 때문에 int형으로 바꿔준 후 가중치를 곱해서 total에 저장한다.
total += int(isbn[i]) * weight[i]
합을 계산할 때 *가 오면 안되기 때문에 i가 손상되어있으면 패스한다.
if i == damaged:
continue
그리고 손상된 자리에 올 수 있는 수를 찾아서 출력하면 완성이다.
tmp에 total값 + 가능한 수들 (j = 1부터 9까지) * 가중치를 넣는다.
가중치를 곱하지 않은 마지막 자릿수인 m도 더해서 계산 해야 되기 때문에 정의해준다.
m = int(isbn[-1])
그리고 0이 되는 j값을 찾았다면, j를 출력해주고 반복문을 끝낸다.
'백준 문제 풀이 > 수학' 카테고리의 다른 글
| 6064 카잉 달력 (python) (3) | 2024.07.16 |
|---|---|
| 1541 잃어버린 괄호 (python) (0) | 2024.07.06 |
| 1193 분수찾기 (python) (0) | 2024.07.02 |
| 15829 Hashing (python) (0) | 2024.06.27 |
| 11050 이항 계수 1 (python) (0) | 2024.06.26 |