알고리즘_진법변환
진법 변환
- Q. 주어진 N값을 2~9진법으로 변환해서 출력하시오.
- 자바 라이브러리에서 2진법, 8진법, 16진법으로 변환시켜주는 라이브러리가 있다.
- Integer.toBinaryString(int i), Integer.toOctalString(int i), Integer.toHexString(int i)
- 라이브러리를 사용하지 않고 직접 진법을 변환시켜주는 알고리즘을 짜보자
- ex) N을 10으로 가정하고, 2진법으로 변환시켰을 때 일어나는 과정을 살펴보자
- 10을 2로 나눈 몫(=5)과 10을 2로 나눈 나머지(=0)를 구한 후 나머지값을 String(=”0”)에 적는다.
- 위에서 나온 몫(=5)에서 다시 2로 나눠 몫(=2)과 나머지(=1)를 구한다. 그리고 나머지 값을 String의 앞(=”10”)에 적는다.
- N값이 1보다 작아질 때까지 위 과정을 반복한다.
- ex) N을 10으로 가정하고, 2진법으로 변환시켰을 때 일어나는 과정을 살펴보자
- 위 알고리즘의 시간복잡도는 진수의 지수만큼 나눠지기 때문에 log(N) 이다.
package coupang;
public class 진법변환 {
public static void main(String[] args) {
진법변환 ch = new 진법변환();
int N = 10;
ch.solution(N);
}
public void solution(int N) {
for (int i = 2; i < 10; i++) {
System.out.println(N + "을 " + i + "진법으로 변환했을 시 : " + pow(N, i));
}
}
public String pow(int n, int exp) {
String str = "";
while(n >= 1) {
int share = n / exp; // 몫
int remain = n % exp; // 나머지
str = (Integer.toString(remain) + str);
n = share;
}
return str;
}
}