
개요

이번 "이진수" 문제는 10진수를 2진수로 바꾸고 1의 인덱스 위치를 찾아 낮은 인덱스부터 출력하는 간단한 문제입니다.
[Java] toBinaryString(), toHexString(), toOctalString() , parseInt() 알아보기 (n진법 변환)
Java를 다루거나, 코딩 테스트를 준비하다 보면 정수형 숫자를 n진수 문자열로 변환해야 하는 일이 종종 있습니다. Java에서는 toBinaryString(), toHexString(), toOctalString()이라는 정수를 n진수 문자열로
pixx.tistory.com
풀이

해당 문제를 풀때는 이진수로 변환할 때 toBinaryString()메서드와 toString()메서드를 사용할 수 있습니다.
toBinaryString()
Integer.toBinaryString(num)
toString()
Integer.toString(num,2)
그런데 toBinaryString()메서드와 toString()메서드 중 어느것이 좀 더 효율적이고, 빠른 메서드인지 궁금했습니다.
toBinaryString() VS toString()
public class BinaryConversionTest {
public static void main(String[] args) {
int number = 123456789;
int iterations = 10000000; // 1천만번 반복
// toBinaryString 테스트
long startTime1 = System.nanoTime();
for (int i = 0; i < iterations; i++) {
String binary1 = Integer.toBinaryString(number);
}
long endTime1 = System.nanoTime();
// toString(2) 테스트
long startTime2 = System.nanoTime();
for (int i = 0; i < iterations; i++) {
String binary2 = Integer.toString(number, 2);
}
long endTime2 = System.nanoTime();
// 결과 출력
System.out.println("toBinaryString 실행 시간: " + (endTime1 - startTime1) / 1000000.0 + "ms");
System.out.println("toString(2) 실행 시간: " + (endTime2 - startTime2) / 1000000.0 + "ms");
// 결과값 확인
System.out.println("\n결과값 비교:");
System.out.println("toBinaryString: " + Integer.toBinaryString(number));
System.out.println("toString(2): " + Integer.toString(number, 2));
}
}
두 메서드를 비교하기 위해서 toBinaryString()과 toString(2) 메서드를 각각 1천만 번 반복 실행하고, 각 메서드의 실행 시간을 측정하는 방법을 사용했습니다.
이 테스트는 두 메서드가 동일한 기능을 수행하는지 확인하고, 성능 차이를 비교하기 위해 설계되었습니다.
실행 시간은 System.nanoTime()을 사용하여 측정하였고, 결과는 밀리초 단위로 출력됩니다. 추가적으로, 두 메서드가 동일한 결과를 반환하는지 확인하기 위해 결과값도 비교하였습니다.

- toBinaryString()이 약 237.57ms 소요
- toString(2)가 약 693.98ms 소요
- toBinaryString()이 toString(2)보다 약 2.92배 더 빠름 (693.98 / 237.57 ≈ 2.92)
로그를 보면 알 수 있듯이 toBinaryString()메서드가 더 빠르다는 것을 알 수 있습니다. 이러한 성능 차이가 발생하는 이유는 toString(2)가 진법 확인 및 유효성 검사 등의 추가적인 작업을 수행하기 때문입니다.
'TIL,일일 회고' 카테고리의 다른 글
| [TIL, 일일 회고] 2024.11.11 - Java에서 소수점 반올림하는 방법 (Math.round(), String.format()) (0) | 2024.11.11 |
|---|---|
| [TIL, 일일 회고] 2024.11.10 - RBAC와 ABAC란 무엇일까❓ (0) | 2024.11.10 |
| [TIL, 일일 회고] 2024.11.08 - StringBuilder의 공백 처리 방법: deleteCharAt()과 setLength() 비교 (3) | 2024.11.08 |
| [TIL, 일일 회고] 2024.11.07 - DDD에서 도메인 서비스와 애플리케이션 서비스를 나누는 이유 (2) | 2024.11.07 |
| [TIL, 일일 회고] 2024.11.06 - pandas란 무엇일까❓ (1) | 2024.11.06 |