입력으로 16진수를 받아 10진수로 변환하여 출력해주면 되는 문제다
자바의 진수변환 내장함수를 사용하면 훨씬 간단하게 구할 수 있지만, 이번에는 내장함수 없이 풀어보았따
import java.util.*;
public class Test {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
String[] arr = input.split("");
String[] numArr = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
int multiplyNum = 0;
int sum = 0;
for(int i=0; i<arr.length; i++){
for(int j=0; j<numArr.length; j++){
if(arr[arr.length-1-i].equals(numArr[j]))break;
else multiplyNum++;
}
sum+=multiplyNum*Math.pow(16,i);
multiplyNum=0;
}
System.out.println(sum);
}
}
좀 나눠서 풀이를 해보쟈
1. 입력은 Scanner클래스로 받아주었다.
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
2. 입력된 16진수를 자릿수별로 쪼개어 arr라는 문자열 배열에 담고,
16진수의 자릿수에 각각 곱해줄 숫자(0~F까지 16개)를 numArr라는 문자열 배열에 담아준다.
String[] arr = input.split("");
String[] numArr = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
3. 입력된 16진수의 가장 작은자릿수 = arr의 가장 끝에 있는 수 = arr[arr.length-1-i]
부터 numArr배열을 한바퀴 돌면서 비교해서 같으면 break, 다르면 multilplyNum++을 해준다.
주의할점은 바깥 for문을 끝내기 전에 multilplyNum을 0으로 초기화해서, 다음 반복을 준비해주어야한다는 점이다.
int multiplyNum = 0;
int sum = 0;
for(int i=0; i<arr.length; i++){
for(int j=0; j<numArr.length; j++){
if(arr[arr.length-1-i].equals(numArr[j]))break;
else multiplyNum++;
}
sum+=multiplyNum*Math.pow(16,i);
multiplyNum=0;
}
'알고리즘' 카테고리의 다른 글
자바 큰정수 BigInteger클래스 (1271번 엄청난 부자2) (0) | 2022.02.22 |
---|---|
알고리즘 여러가지 (0) | 2022.02.07 |