작성일 :

문제 링크

9228번 - Check Digits

설명

숫자 문자열에 대해 검증 숫자를 계산하는 문제입니다.


접근법

각 자릿수에 오른쪽부터 2, 3, 4, … 순서로 가중치를 곱해 모두 더합니다.

이 합을 11로 나눈 나머지를 11에서 빼면 검증 숫자가 됩니다. 결과가 10이면 거부하고, 11이면 0으로 출력합니다.



Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Text;

class Program {
  static void Main() {
    string? s;
    var sb = new StringBuilder();
    while ((s = Console.ReadLine()) != null) {
      if (s == "#") break;

      var weight = 2;
      var sum = 0;
      for (var i = s.Length - 1; i >= 0; i--) {
        sum += (s[i] - '0') * weight;
        weight++;
      }

      var rem = sum % 11;
      var chk = 11 - rem;
      if (chk == 10) sb.AppendLine($"{s} -> Rejected");
      else {
        if (chk == 11) chk = 0;
        sb.AppendLine($"{s} -> {chk}");
      }
    }
    Console.Write(sb);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <bits/stdc++.h>
using namespace std;

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

  string s;
  while (cin >> s) {
    if (s == "#") break;
    int weight = 2;
    int sum = 0;
    for (int i = (int)s.size() - 1; i >= 0; i--) {
      sum += (s[i] - '0') * weight;
      weight++;
    }
    int rem = sum % 11;
    int chk = 11 - rem;
    if (chk == 10) {
      cout << s << " -> Rejected\n";
    } else {
      if (chk == 11) chk = 0;
      cout << s << " -> " << chk << "\n";
    }
  }

  return 0;
}

Tags: 9228, arithmetic, BOJ, C#, C++, 구현, 문자열, 백준, 수학, 알고리즘

Categories: ,