[백준 14626] ISBN (C#, C++) - soo:bak
작성일 :
문제 링크
설명
13자리 ISBN에서 체크기호를 포함한 숫자 하나가 *로 훼손되어 있을 때, 가중치 규칙을 만족하는 원래 숫자를 찾는 문제입니다.
접근법
각 자리의 가중치는 앞에서부터 1, 3, 1, 3, … 이며, 마지막 체크기호 자리도 같은 합에 포함됩니다.
알려진 자리들의 가중 합을 먼저 구한 뒤, * 자리에 0부터 9까지 넣어 보면서 전체 합을 10으로 나눈 나머지가 0이 되는 값을 찾으면 됩니다.
가능한 숫자는 10개뿐이므로 한 번의 순회와 간단한 확인으로 충분합니다.
Code
C#
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
using System;
class Program {
static void Main() {
var s = Console.ReadLine()!;
var sum = 0;
var star = -1;
for (var i = 0; i < 13; i++) {
if (s[i] == '*') {
star = i;
continue;
}
var d = s[i] - '0';
var w = (i % 2 == 0) ? 1 : 3;
sum += d * w;
}
var starWeight = (star % 2 == 0) ? 1 : 3;
for (var x = 0; x <= 9; x++) {
if ((sum + x * starWeight) % 10 == 0) {
Console.WriteLine(x);
return;
}
}
}
}
C++
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s; cin >> s;
int sum = 0, star = -1;
for (int i = 0; i < 13; i++) {
if (s[i] == '*') {
star = i;
continue;
}
int d = s[i] - '0';
int w = (i % 2 == 0) ? 1 : 3;
sum += d * w;
}
int star_weight = (star % 2 == 0) ? 1 : 3;
for (int x = 0; x <= 9; x++) {
if ((sum + x * star_weight) % 10 == 0) {
cout << x << "\n";
return 0;
}
}
return 0;
}