알고리즘/백준
진법변환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
반응형