매일 BOJ
(매일 BOJ) C++ 14626번 ISBN
norepinephrine
2025. 7. 12. 01:15
이번 문제는 브론즈 1 난이도 ISBN문제이다.

접근법을 정리해보면 이러하다.
- 입력된 문자열에서 *의 위치(idx) 찾기
- 다른 12자리 숫자들의 가중 합을 계산해 sum에 저장하기.
- * 위치가 짝수라면 해당 자리의 가중치는 1, 홀수라면 3.
- i를 0~9까지 대입하며 (sum + i * weight + check_digit) % 10 == 0을 만족하는 값 출력
아래는 작성한 코드이다.
#include <bits/stdc++.h>
using namespace std;
int main (void){
ios::sync_with_stdio(0); cin.tie(0);
string v;
cin >> v;
int index = v.find('*');
int end = (int)v[12] - '0';
index = index % 2;
int sum = 0;
for (int i = 0; i < 12; i++){
if (v[i] == '*') continue;
else if (i % 2 == 1) sum += ((int)v[i] - '0') * 3;
else if (i % 2 == 0) sum += (int) v[i] - '0';
}
for (int i = 0; i <= 9; i++) {
int total;
if (index == 1) total = sum + i * 3 + end;
else total = sum + i + end;
if (total % 10 == 0) cout << i;
}
}