작성일 :

문제 링크

5220번 - Error Detection

설명

입력으로 주어진 정수를 16 비트의 2 진수로 변환했을 때,

해당 2 진수에서 1 의 개수의 홀수 인지, 짝수 인지를 체크 비트 를 통해 확인하는 문제입니다.

문제의 조건에 따르면, 체크 비트1 의 개수가 홀수일 때 1 이고, 짝수일 때 0 입니다.

따라서, 1 의 개수가 홀수 이고 체크 비트1 이거나, 1 의 개수가 짝수 이고 체크 비트0 이라면 Valid 를,

그렇지 않으면, Corrupt 를 출력합니다.


Code

[ C# ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace Solution {
  class Program {
    static void Main(string[] args) {

      var cntCase = int.Parse(Console.ReadLine()!);

      for (int c = 0; c < cntCase; c++) {
        var input = Console.ReadLine()!.Split(' ');

        var num = int.Parse(input[0]);
        var checkBit = int.Parse(input[1]);

        var cntOne = Convert.ToString(num, 2).ToCharArray().Sum(b => b - '0');

        if (cntOne % 2 == checkBit) Console.WriteLine("Valid");
        else Console.WriteLine("Corrupt");
      }

    }
  }
}



[ C++ ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>

using namespace std;

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

  int cntCase; cin >> cntCase;

  for (int c = 0; c < cntCase; c++) {
    int num, checkBit; cin >> num >> checkBit;

    bitset<16> binary(num);
    int cntOne = binary.count();

    if (cntOne % 2 == checkBit) cout << "Valid\n";
    else cout << "Corrupt\n";
  }

  return 0;
}