매일 BOJ

(매일 BOJ) C++ 14626번 ISBN

norepinephrine 2025. 7. 12. 01:15

이번 문제는 브론즈 1 난이도 ISBN문제이다.

 

접근법을 정리해보면 이러하다.

  1. 입력된 문자열에서 *의 위치(idx) 찾기
  2. 다른 12자리 숫자들의 가중 합을 계산해 sum에 저장하기.
  3. * 위치가 짝수라면 해당 자리의 가중치는 1, 홀수라면 3.
  4. 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;
    }
}