문제 |
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 */
'PS > BOJ' 카테고리의 다른 글
[C++] BOJ (백준) 2798 : 블랙잭 (0) | 2023.03.01 |
---|---|
[C++] BOJ (백준) 2775 : 부녀회장이 될테야 (0) | 2023.02.28 |
[C++] BOJ (백준) 2751 : 수 정렬하기 2 (0) | 2023.01.12 |
[C++] BOJ (백준) 2609 : 최대공약수와 최소공배수 (0) | 2023.01.12 |
[C++] BOJ (백준) 2292 : 벌집 (0) | 2022.12.25 |