

문제 출처 : https://www.acmicpc.net/problem/14626
난이도 : 브론즈 1
ISBN-13은 총 13자리 숫자로 이루어진 코드이며,
각 자리에 가중치를 곱한 합이 특정 조건을 만족해야 유효한 ISBN이 된다.
규칙은 다음과 같다.
문제에서는 ISBN 13자리 중 딱 한 자리가 *로 가려져 있고
이 * 자리에 들어갈 숫자(0~9)를 찾아야 한다.
* 자리에 들어갈 수 있는 숫자는 0부터 9까지뿐이다.
따라서 가장 단순하게:
*의 위치를 찾는다.자리 수가 고정(13자리)이고 경우의 수도 10개뿐이라
완전탐색으로 충분히 해결 가능하다.
입력은 문자열로 받아 *의 인덱스를 먼저 찾는다.
이후 0부터 9까지 숫자를 하나씩 넣어보며,
각 자리의 숫자에 맞는 가중치(1 또는 3)를 곱해 총합을 계산한다.
주의할 점은 인덱스 기준이다.
문자열은 0부터 시작하므로:
총합이 10으로 나누어 떨어지면,
그때 대입한 숫자가 *에 들어갈 정답이다.
최종 코드는 다음과 같다.
import sys
input = sys.stdin.readline
s = input().strip()
star_idx = s.index('*') // string.index("s") 메서드를 쓰면 쉽게 특정 문자의 인덱스를 받아올 수 있다.
for d in range(10):
total = 0
for i in range(13):
if i == star_idx:
digit = d
else:
digit = int(s[i])
if i % 2 == 0:
total += digit
else:
total += digit * 3
if total % 10 == 0:
print(d)
break
별에 들어갈 숫자를 식을 세워서 구현할수도 있겠지만,
0~9를 대입해서 구해본다는 생각이 킥이었던 것 같다.