[자바JAVA]11005번 진법 변환2

문제 11005번 진법 변환 2

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, …, F: 15, …, Y: 34, Z: 35

  • 입력예시
    첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
1
60466175 36
  • 출력예시
    첫째 줄에 10진법 수 N을 B진법으로 출력한다.
1
ZZZZZ




코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package backjoon;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

// https://www.acmicpc.net/problem/11005

public class mento11005 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] input = sc.nextLine().split(" ");
sc.close();
int n = Integer.parseInt(input[0]);
int b = Integer.parseInt(input[1]);

List<Character> list = new ArrayList<>();
while(n > 0) {
if (n % b < 10) {
list.add((char) (n % b + '0'));
} else { // 나머지가 10이상이면 A(10) B(11) C(12) ... Z(35)
list.add((char) (n % b - 10 + 'A'));
}
n /= b; // b로 계속 나누기
}

//출력
for(int i=0; i<list.size(); i++){
System.out.print(list.get(i));
}
}//end of main()
}




배운 지식

  • 숫자를 char로 나타내고 싶을때는 (char)로 형변환
    • 형변환시 괄호가 중요하다
  • char를 아스키코드로 나타내고 싶을때는 숫자를 더하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//괄호의 중요성
System.out.println((char) 9+'0'); //57
System.out.print((char) (9+'0')); //9

//10보다 작은 수 테스트
System.out.print((char) (8+'0')); //8
System.out.print((char) (7+'0')); //7
System.out.print((char) (6+'0')); //6
System.out.print((char) (5+'0')); //5
System.out.print((char) (4+'0')); //4
System.out.print((char) (3+'0')); //3
System.out.print((char) (2+'0')); //2
System.out.print((char) (1+'0')+"\n"); //1

//숫자를 char로 나타내고 싶을때는 (char) 형변환
System.out.println((char) 65); //A

//char를 아스키코드로 나타내고 싶을때는 숫자를 더할 것
System.out.println('A'+1); //66

//위의 두 방법 합쳐서도 가능
System.out.println((char) ('A'+1)); //B

https://dojang.io/mod/page/view.php?id=743

https://jsieun73.tistory.com/108




멘토님코드

메소드로 뺄 생각은 안해봤는데 훨씬 흐름을 이해하기 쉬운 것 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;

class Main {
public static void main(String[] args) {
new Main().solve();
}

private void solve() {
Scanner sc = new Scanner(System.in);

String[] input = sc.nextLine().split(" ");

int base10 = Integer.parseInt(input[0], 10);
int base = Integer.parseInt(input[1], 10);

String result = changeBaseN(base10, base);
System.out.println(result);
}

private String changeBaseN(int base10, int base) {
String[] nBase = makeNBase(base);

String result = "";
while (base10 >= base) {
int num = base10 % base;
base10 = base10 / base;
result = nBase[num] + result;
}

result = nBase[base10] + result;
return result;
}

private String[] makeNBase(int base) {
String[] nBase = new String[base];

for (int i = 0; i < base; i++) {
if (i < 10) {
nBase[i] = i + "";
} else {
nBase[i] = (char)('A' + (i - 10)) + "";
}
}
return nBase;
}
}

Comments