백준 문제 풀이/수학

14626 ISBN

한사공사 2025. 9. 2. 15:57

 

풀이

숫자들을 입력받은 후 앞에 가중치를 곱한 후 전부 더하고 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