본문 바로가기

PS/BOJ

[C++] BOJ (백준) 24901 : Binary Game 2

문제

24901번: Binary Game 2 (acmicpc.net)

 

24901번: Binary Game 2

이진수 게임은 술자리 게임으로, 순서대로 돌아가면서 이진수의 각 자리수를 말하는 게임이다. 첫 번째 사람이 0의 이진수 표현인 0을 말하고, 다음 사람은 1의 이진수 표현인 1을 말한다. 그 다

www.acmicpc.net

 

설명

C++, Java, Swift, Ruby 에서 동시에 작동하는 코드를 만들어야 한다.

먼저 C++로 정답 코드를 만들어보자.
'이진수 게임은 한 사람이 한 숫자를 부르는 게임'이라는 설명 때문에 혼란이 있을 수도 있다.
하지만 사람 정보는 이 문제에서 필요없기 때문에, 그냥 '입력된 정수까지의 이진수'를 구하면 된다.

#include <iostream>

using namespace std;

void printBinary(int n) {
  if (n / 2 != 0) {
    printBinary(n / 2);
  }
  cout << n % 2;
}

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

  int n;
  cin >> n;
  for (int i = 0; i <= n; i++) {
    printBinary(i);
  }
  return 0;
}

이제 이 코드를 통해 모든 입력값에 대한 출력값을 알 수 있다.
이 문제의 입력값은 0부터 10, 즉 11개밖에 없기 때문에 각 언어별로 이진수 변환 함수를 만드는 것보다
11개의 값을 하드코딩해서 배열에 넣고 출력하는 방식이 유리하다고 판단했다.

#include <iostream>

using namespace std;

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  
  string arr[] =
      {"0", "01", "0110", "011011", "011011100", "011011100101", "011011100101110", "011011100101110111",
       "0110111001011101111000", "01101110010111011110001001", "011011100101110111100010011010"};
  int n;
  cin >> n;
  cout << arr[n];
  return 0;
}


이제 다른 언어의 코드를 합쳐야한다.
이를 위해 언어마다 다른 주석의 특징을 활용할 필요가 있다.

먼저 Ruby에는 // 주석과 /* */ 주석이 없고, <<DOC DOC(이름은 변경해도 상관없다)으로 여러 줄 주석을 할 수 있다.

//;<<DOC
이 코드는 Ruby에서만 실행되지 않습니다.
/*
DOC
이 코드는 Ruby에서만 실행됩니다.
/0*/


Java는 \u000a로 개행 문자를, \u002a로 *을 나타낼 수 있다.
다만 IDE는 인식을 못하는지 하이라이팅이 제대로 되지 않는다.

/*\u002a/
이 코드는 Java에서만 실행됩니다.
// */

//\u000a/*
이 코드는 Java에서만 실행되지 않습니다.
// */


C++는 // \로 다음 줄을 주석 처리할 수 있다.

// \
/*
이 코드는 C++에서만 실행됩니다.
// */

// \
이 코드는 C++에서만 실행되지 않습니다.


Swift는 중첩된 주석을 지원한다.

/* /* */
이 코드는 Swift에서만 실행되지 않습니다.
// */ 이 코드는 Swift에서만 실행됩니다.

 

완성된 코드는 다음과 같다.

//; <<DOC
// \u000a /*


// \
let arr = ["0", "01", "0110", "011011", "011011100", "011011100101", "011011100101110", "011011100101110111", "0110111001011101111000", "01101110010111011110001001", "011011100101110111100010011010"]
// \
let n = Int(readLine()!)!
// \
print(arr[n])


// \
/*


#include <iostream>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  string arr[] =
      {"0", "01", "0110", "011011", "011011100", "011011100101", "011011100101110", "011011100101110111", "0110111001011101111000", "01101110010111011110001001", "011011100101110111100010011010"};
  int n;
  cin >> n;
  cout << arr[n];
  return 0;
}


// \
*/
// */
/* \u002a/


public class Main {
    public static void main(String[] args) throws java.io.IOException {
        String arr[] =
      {"0", "01", "0110", "011011", "011011100", "011011100101", "011011100101110", "011011100101110111", "0110111001011101111000", "01101110010111011110001001", "011011100101110111100010011010"};
        java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(System. in));
        int n = Integer.parseInt(br.readLine());
        System.out.println(arr[n]);
    }
}


// */
/*
DOC


arr = ["0", "01", "0110", "011011", "011011100", "011011100101", "011011100101110", "011011100101110111", "0110111001011101111000", "01101110010111011110001001", "011011100101110111100010011010"]
n = gets.to_i
print(arr[n])


/0 */