💡 핵심 요약 (TL;DR)
'11005번 진법 변환2' 알고리즘 문제의 요구사항을 분석하고 최적의 자료구조와 연산 방식을 적용해 구현한 풀이다.
* char를 아스키코드로 나타내고 싶을때는 숫자를 더하기을 확인했다.
문제 11005번 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, …, F: 15, …, Y: 34, Z: 35
입력예시 첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.
출력예시 첫째 줄에 10진법 수 N을 B진법으로 출력한다.
코드 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;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 { list.add((char ) (n % b - 10 + 'A' )); } n /= b; } for (int i = 0 ; i<list.size(); i++){ System.out.print(list.get(i)); } } }
배운 지식
숫자를 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' ); System.out.print((char ) (9 +'0' )); System.out.print((char ) (8 +'0' )); System.out.print((char ) (7 +'0' )); System.out.print((char ) (6 +'0' )); System.out.print((char ) (5 +'0' )); System.out.print((char ) (4 +'0' )); System.out.print((char ) (3 +'0' )); System.out.print((char ) (2 +'0' )); System.out.print((char ) (1 +'0' )+"\n" ); System.out.println((char ) 65 ); System.out.println('A' +1 ); System.out.println((char ) ('A' +1 ));
멘토님코드 메소드로 뺄 생각은 안해봤는데 훨씬 흐름을 이해하기 쉬운 것 같다.
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; } }
#Backjoon