10진수를 2진수로 변환하는 방법은 많이 알고들 있을 것이다.
10진수를 계속해서 2로 나누다가 몫이 0이 되면 그동안 나왔던 나머지들을 역순으로 나열하면 된다.
예를 들어 16을 2진수로 변환하는 방법은 다음과 같으며 2진수로 변환한 값은 10000(2)다.

그럼 8진수, 16진수 등 N진수들은 ?
방법은 똑같다. 대신 2진수는 계속 2로 나눠주었다면, n진수는 n으로 계속 나눠주면 된다.
1. 10진수 --> 8진수
10진수 126를 8진수로 변환해보자.

처음 126을 8로 나눈 몫은 15, 나머지는 6이다.
그 다음 위에서 나온 몫 15를 다시 8로 나누면 나머지가 7이고
몫이 0일때 나머지는 역순으로 나열한 176(8)이 126을 8진수로 변환한 값이다.
∴ 126(10) --> 176(8)
2. 10진수 --> 16진수
이번엔 126을 16진수로 변환해보자

126을 16으로 나누면 몫이 7, 나머지가 14다.
다음 7을 16으로 나누면 몫이 0, 나머지는 7이므로 역순으로 나열하면 714 이다.
그러나 우리가 표한할 수 있는 숫자는 0~9까지이기 때문에 10부터는 알파벳으로 대체하는 것이 진법의 규칙이다.
10 --> A
11 --> B
12 --> C
13 --> D
14 --> E
따라서 126을 16진수로 변환한 값은 7E 이다.
∴ 126(10) --> 7E(16)
[JAVA code]
// 10진수를 N진수로 변환
public static String getConventN(int num, int n) {
String result = "";
if (num == 0) {
return "0";
}
while (num > 0) {
int share = num / n;
int remainder = num % n;
if (remainder > 9) {
result = (char) (remainder + 55) + result;
} else {
result = remainder + result;
}
num = share;
}
return result;
}
[관련 문제]
https://programmers.co.kr/learn/courses/30/lessons/17687
코딩테스트 연습 - [3차] n진수 게임
N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0
programmers.co.kr
package com.algorithm.kakaoTest.four;
/**
* n진수 게임 Lv.2
* 소요시간: 45분 3초
*/
public class Test01 {
public static void main(String[] args) {
int n = 2; // 진법 n
int t = 4; // 구할 숫자의 갯수 t
int m = 2; // 게임에 참가하는 인원 m
int p = 1; // 튜브의 순서 p
String answer = solution(n, t, m, p);
System.out.println(answer);
}
public static String solution(int n, int t, int m, int p) {
String answer = "";
int num = 0;
int totalCount = ((t - 1) * m) + p; // 돌아야 하는 총 순서의 수
String totalOutput = " ";
int count = 0;
while (count < totalCount) {
String N = getConventN(num, n); // 숫자를 N진수로 변환
for (int i = 0; i < N.length(); i++) {
totalOutput += N.charAt(i);
count++;
}
num++;
}
for (int i = p; i < totalOutput.length(); i += m) {
answer += totalOutput.charAt(i);
}
return answer.substring(0, t);
}
// 10진수를 N진수로 변환
public static String getConventN(int num, int n) {
String result = "";
if (num == 0) {
return "0";
}
while (num > 0) {
int share = num / n;
int remainder = num % n;
if (remainder > 9) {
result = (char) (remainder + 55) + result;
} else {
result = remainder + result;
}
num = share;
}
return result;
}
}
'코딩 테스트 > TIP' 카테고리의 다른 글
[코딩테스트] 2차원배열 회전하기 (1) | 2021.05.24 |
---|---|
[JAVA] 날짜, 시간 계산 총 정리 (0) | 2020.11.24 |
[JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces()) (0) | 2020.11.10 |
[JAVA] 아스키(ASCII) 코드 값 구하기 (0) | 2020.11.10 |
[JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기 (2) | 2020.10.29 |