728x90
알고리즘 문제에서 자주 사용되는, 10진수 -> n진수 변환 방법에 대해 알아보자.
Integer.toString 과 toBinaryString 메서드
2진수로 변환
final String binNum = Integer.toBinaryString(16);
System.out.println("binNum = " + binNum);
final String formattedNumber = String.format("%8s", binNum).replace(" ", "0");
System.out.println("formattedNumber = " + formattedNumber);
2진수는 toBinaryString(int number); 메서드를 사용하면 문자열로 변환해 보여준다.
만약, 앞에 0을 원하는만큼 붙여주고 싶다면 String.format을 활용 가능하다.
n진수로 변환
동적으로 2진법, 8진법을 가리지 않고 적용시키고 싶다면 toString(int i, int radix); 메서드를 활용하면 된다.
아래 코드를 통해 3진수, 12진수까지 100 이란 정수를 변환해보았다.
for (int radix = 3; radix < 12; radix++) {
final String s = Integer.toString(100, radix);
System.out.println("radix " + radix + " = " + s);
}
직접 계산
public String radix(int num, int n) {
StringBuilder sb = new StringBuilder();
// 숫자가 0이면 0을 리턴
if (num == 0) return "0";
while (num > 0) {
// 나머지가 1자릿수면 그대로 추가
if (num % n < 10) {
sb.append(num % n);
// 10, 11, 12 .. 의 경우 알파벳을 추가해야함. 10=A, 11=B ...
} else {
sb.append((char)(num%n-10 + 'A'));
}
// 추가가 끝났다면 n으로 나눈 몫을 다시 계산
num /= n;
}
// 계산한 나머지값의 역순으로 만들어야한다.
return sb.reverse().toString();
}
설명은 주석으로 대체한다.
위 함수로 100을 여러 진법으로 계산해도 위 Integer.toString() 과 동일한 결과가 나온다.
n진수 문자열을 10진수 정수로 변환
어려울 것 없이, Integer.parseInt(int i, int radix); 를 이용하면 된다.
숫자 문자열을 2번째 파라미터의 정수문자열 값으로 n진수 변환한다.
아래는 11을 8진수로 변환할 때 10진수 정수 9가 나오는 모습이다.
final int StringToInteger = Integer.parseInt("11", 8);
System.out.println("StringToInteger = " + StringToInteger);
'프로그래밍 > JAVA' 카테고리의 다른 글
[Spring] @Sql 어노테이션을 test class에서 1번만 실행시키려면? (0) | 2023.01.30 |
---|---|
[java] Date, LocalDateTime 사용법 간단 정리 (0) | 2022.04.24 |
다형성: 우리는 왜 List list = new ArrayList(); 라고 쓸까? (0) | 2022.04.04 |
List 2차원 배열 만들기 (Array of ArrayList, 2d array with ArrayList) (0) | 2022.02.10 |
[Java] 정수 콤마 넣기 (천원 단위 변환, 금액 변환) (0) | 2021.08.02 |