알고리즘/백준

진법변환2 11005

ukkkk7 2023. 10. 25. 16:30
728x90
반응형

 

 

 

앞선 2745번 문제와 반대인 문제이다. 

10진법 수를 입력받고 이를 입력받은B진법의 수로 변환하는 문제

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {


    public static void main(String[] args) throws IOException {
	
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(br.readline());
    
    //10진법 수와 변환할 진법 입력
    int n = Integer.parseInt(st.nextToken());
    int b = Integer.parseInt(st.nextToken());

	 
     StringBuilder sb = new StringBuilder(); 
     
     
    while(n != 0 ){
	
    //조건은 0 ~ 9까지의 숫자로 표현될 수 있을지 Or 10을 넘어 대문자로 표현해야 할지  
        if(n % b >= 10){
  //예제에서는 A부터 10이라고 했으니 해당 숫자를 - 하고 'A'를 더해주면 대문자 char값을 구할 수 있다.
        	sb.append((char)(n % b -10 + 'A'));
        } else {
        	// 0 ~ 9의 값에 해당된다면 char형인 0을 더해주어 0 ~ 9의 char형을 구해준다.
        	sb.append((char)(n % b + '0'));
        }
    	
        //누적해서 /를 해준다.
    	n /= b;
    
    }

	String result = sb.reverse().toString();

	System.out.println(result);
	
	}
}

 

이건 다시 코드를 쓸때 무심코 StringBuilder를 써서 출력한건데 이전 작성한 코드는 아래와 같이 List<char>를 선언해서 해당 리스트에 저장 후 for문을 통해 글자를 출력하는 식이었다. 그런데 StringBuilder를 썼을 때 메모리를 더 잡아먹는다.

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {


    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());

        int b = Integer.parseInt(st.nextToken());

        List<Character> word = new ArrayList<>();

        while (n != 0){

            if(n % b >= 10){
                word.add((char)((n % b) - 10 + 'A'));
            } else {
                word.add((char)(n % b + '0'));
            }
               n /= b;
        }


        for(int i=word.size()-1; i>=0; i--){

           System.out.print(word.get(i));

        }


    }
}

 

아래가 List를 썼을때 위가 StringBuilder를 썼을 때

728x90
반응형