| 문제 | 난이도 | 핵심 |
|---|---|---|
| 이진 변환 반복하기 | Lv.2 | toBinaryString 반복 적용 |
| 짝수와 홀수 | Lv.1 | 2진수 마지막 비트로 홀짝 판별 |
| 숫자의 표현 | Lv.2 | 진수 변환 응용 |
Integer.toBinaryString()은 10진수 정수를 2진수 문자열로 변환하는 Java 내장 메서드다.
int n = 10;
String binary = Integer.toBinaryString(n);
System.out.println(binary); // "1010"
String.valueOf()나 Integer.toString()처럼 숫자를 문자열로 바꾸는데, 2진수 형태로 바꿔준다는 점이 다르다.
10을 2진수로 변환하는 과정
| 단계 | 연산 | 몫 | 나머지 (2진수 자리) |
|---|---|---|---|
| 1 | 10 ÷ 2 | 5 | 0 |
| 2 | 5 ÷ 2 | 2 | 1 |
| 3 | 2 ÷ 2 | 1 | 0 |
| 4 | 1 ÷ 2 | 0 | 1 |
나머지를 아래에서 위로 읽으면 1010. toBinaryString(10)의 결과와 같다.
Integer.toBinaryString(0); // "0"
Integer.toBinaryString(1); // "1"
Integer.toBinaryString(10); // "1010"
Integer.toBinaryString(255); // "11111111"
toBinaryString()은 앞의 0을 생략한다. 자릿수를 맞춰야 할 때는 String.format()을 쓴다.
String binary = String.format("%8s", Integer.toBinaryString(10)).replace(' ', '0');
System.out.println(binary); // "00001010"
Integer.parseInt()의 두 번째 인자로 진수를 지정하면 된다.
String binary = Integer.toBinaryString(10); // "1010"
int n = Integer.parseInt(binary, 2); // 10
toBinaryString()은 int가 아닌 String을 반환한다. 그래서 비트 연산이 필요하면 다시 parseInt()로 변환해야 한다.
String binary = Integer.toBinaryString(10);
// binary.length() → 4 (문자열 길이)
// binary + "0" → "10100" (문자열 이어붙이기)
// binary * 2 → ❌ 컴파일 에러
Java의 int는 32비트이기 때문에 음수를 넣으면 부호 비트까지 포함한 32자리가 출력된다.
Integer.toBinaryString(-1);
// "11111111111111111111111111111111" (32자리)
코테에서 음수를 다룰 일은 거의 없지만, 알고 있어야 실수를 안 한다.
| 연산 | 시간복잡도 | 비고 |
|---|---|---|
Integer.toBinaryString(n) | O(log N) | 2진수 자릿수만큼 순회 |
Integer.parseInt(binary, 2) | O(log N) | 문자열 길이만큼 순회 |
int로 착각해서 산술 연산 하려다 에러 나는 경우가 많다.'0', '1'을 써라. arr[i] == 0이 아니라 arr[i] == '0'이다. char 타입과 int 타입의 비교는 ASCII 값으로 비교되기 때문에 의도한 결과가 안 나온다.String.format()으로 패딩해라.