๐ ๋ฌธ์
https://www.acmicpc.net/problem/14626
๐ ๋ฌธ์ ์์ฝ
ISBN์ด abcdefghijklm ์ผ ๋, a+3b+c+3d+e+3f+g+3h+i+3j+k+3l+m โก 0 (mod 10)
์ฆ, ์ฒดํฌ๊ธฐํธ m = 10 - (a+3b+c+3d+e+3f+g+3h+i+3j+k+3l) mod 10 ์ด๋ค.
๋จ, 10์ผ๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ด 0์ผ ๊ฒฝ์ฐ ์ฒดํฌ๊ธฐํธ๋ 0์ด๋ค.์ ๋ ฅ: ISBN 13์๋ฆฌ ์ซ์๊ฐ ์ ๋ ฅ๋๋ค. ํผ์๋ ์ซ์๋ *๋ก ํ์ํ๋ค. (ํผ์๋ ์ผ๋ จ๋ฒํธ๋ ์ฒดํฌ๊ธฐํธ๋ฅผ ์ ์ธํ ๋ฌด์์ ํ ์๋ฆฌ์ด๋ค.)
์ถ๋ ฅ: ํผ์๋ ์ซ์ *์ ์๋ง์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ก ์ ๊ทผ ๋ฐฉ๋ฒ
์กฐ๊ฑด์ ๋ฐ๋ผ ๊ณ์ฐ์์ ๋ฐ๊ฟ ์ ์ฉํ๋๋ก ํด์ผ ํ๋ค.
๋ฌธ์ ์ ์ ์ฒด ๊ณ์ฐ์์ ๋์์๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด๋ง ์ ์ ์ฉํด์ฃผ๋ฉด ๊ฐ๋จํ ๋ฌธ์
โ ๏ธ ์ฒ์์ ํ๋ ์ค์
-
๐ป ์ฝ๋
#include <iostream>
#include <string>
using namespace std;
string serial;
int main() {
cin >> serial;
int size = serial.size();
int mul3 = false;
int ans = 0;
bool targetMul3 = false;
bool checkSign = true;
for (int i = 0; i < size - 1; ++i) {
if (serial[i] == '*') {
targetMul3 = mul3;
mul3 = !mul3;
checkSign = false;
continue;
}
int val = serial[i] - '0';
if (mul3)
ans += val * 3;
else
ans += val;
mul3 = !mul3;
}
int ret = 0;
if (checkSign)
ret = (10 - (ans % 10)) % 10;
else {
ret = (10 - (serial[size - 1] - '0')) % 10;
int mul = targetMul3 ? 3 : 1;
for (int i = 0; i <= 9; ++i) {
if (ret == ((i * mul) + ans) % 10) {
ret = i;
break;
}
}
}
cout << ret;
return 0;
}