-
https://www.acmicpc.net/problem/2745
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
ZZZZZ 36
60466175
ZZZZZ 이 36진법이라면 Z는 35이고 제곱합으로 더해간다. (36의 0승 ~ 36의 4승)
35 * 1 +
35 * 36 +
35 * 36 * 36 +
35 * 36 * 36 * 36 +
35 * 36 * 36 * 36 * 36
= 60466175
# 첫번째 풀이
char배열로 받아 한바퀴 돌며 int로 변환하여 배열에 저장
뒤에서부터 검사하며 제곱합을 구함
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); char charArr[] = sc.next().toCharArray(); int intArr[] = new int[charArr.length]; int B = sc.nextInt(); for(int i=0; i<charArr.length; i++){ int num = (int)charArr[i]; if(num >= 65 && num <= 90) { intArr[i] = num - 55; } else { intArr[i] = Character.getNumericValue(charArr[i]); } } int result = intArr[intArr.length-1]; int temp = B; for(int i=intArr.length-2; i>=0; i--){ result += intArr[i] * temp; temp = temp * B; } System.out.println(result); } }
# 두번째 풀이
char를 int로 바꾸는 메서드로 추출하여
두바퀴 돌던 것을 한번에 끝내도록 수정
import java.util.Scanner; public class Main { public static int charToInt(char c) { int num = (int)c; if(num >= 65 && num <= 90) { return num - 55; } else { return Character.getNumericValue(c); } } public static void main(String[] args){ Scanner sc = new Scanner(System.in); char charArr[] = sc.next().toCharArray(); int B = sc.nextInt(); int result = charToInt(charArr[charArr.length-1]); int temp = B; for(int i=charArr.length-2; i>=0; i--){ result += charToInt(charArr[i]) * temp; temp = temp * B; } System.out.println(result); } }
'자바알고리즘' 카테고리의 다른 글
[프로그래머스 LV.2] JadenCase 문자열 만들기 (java) (1) 2023.04.23 [프로그래머스 LV.1] 바탕화면 정리 (java) (0) 2023.04.07 [프로그래머스 LV. 1] 공원 산책 (java) (0) 2023.04.03 [262가지 문제로 정복하는 코딩 인터뷰 간단요약] 8장 스택과 큐 (0) 2022.12.24 [262가지 문제로 정복하는 코딩 인터뷰 간단요약] 7장 연결리스트 (0) 2022.12.13 댓글