[C++] 백준 14626번 ISBN

xyzw·2025년 8월 23일
0

algorithm

목록 보기
67/97

https://www.acmicpc.net/problem/14626

풀이

입력되는 13자리 숫자 중 *로 표시된 손상된 숫자를 제외하고, 가중치를 곱해서 더한 값을 sum이라고 하자.
(sum + [*] x 가중치) % 10 == 0
위 식을 만족하도록 *를 구하면 된다.

*는 0~9 범위의 자연수이므로 브루트포스 방식을 사용해도 시간이 길게 소요되지 않을 것이라 판단하여
0부터 9까지 수를 증가시키면서 *에 대입하여 위 식을 만족하는지 확인하였다.

코드

#include <iostream>

using namespace std;

int main()
{
    int sum = 0, idx, mul, ans;
    string s;
    cin >> s;
    
    for(int i=0; i<s.size(); i++) {
        if(s[i] == '*') {
            idx = i;
            continue;
        }
        (i%2 == 0) ? mul = 1 : mul = 3;
        sum += (s[i] - '0') * mul;
    }

    (idx%2 == 0) ? mul = 1 : mul = 3;
    
    for(ans=0; ans<10; ans++) {
        int res = sum + ans*mul;
        if(res % 10 == 0) break;
    }

    cout << ans;
    
    return 0;
}

0개의 댓글