문제 링크


🔷 분류

수학, 구현, 브루트포스 알고리즘, 사칙연산

✒️ 문제 설명

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이 훼손된 도서들을 발견했다. 광현이때문에 야근해야 하는 불쌍한 영훈이를 위해서 손상된 자리의 숫자를 찾아내는 프로그램을 작성해주자.

⬅️ 입력

ISBN 13자리 숫자가 입력된다. 훼손된 숫자는 *로 표시한다. (훼손된 일련번호는 체크기호를 제외한 무작위 한 자리이다.)

➡️ 출력

훼손된 숫자 *에 알맞은 숫자를 출력한다.

💻 코드 (C++)

#include <iostream>
#include <string>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  string isbn;
  cin >> isbn;

  int star_index = -1;
  int sum = 0;

  for (int i = 0; i < 13; i++) {
    if (isbn[i] == '*') {
      star_index = i;
      continue;
    }

    int digit = isbn[i] - '0';
    if (i % 2 == 0) sum += digit;
    else sum += digit * 3;
  }

  for (int x = 0; x <= 9; x++) {
    int temp_sum = sum;
    if (star_index % 2 == 0)
      temp_sum += x;
    else
      temp_sum += x * 3;

    if (temp_sum % 10 == 0) {
      cout << x << '\n';
      break;
    }
  }

  return 0;
}

글 이동

Comments