알고리즘

16진수 10진수로 변환하기 (백준 1550번, 진수 내장함수 쓰지않고)

땅콩콩 2022. 2. 22. 15:23

입력으로 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