✅문제
10진법으로 첫번째값으로 주어진다. 이 수를 두번째 값으로 주어진 진법으로 변환하여 출력하는 문제이다
✅풀이
🧁풀이과정
예를 들어 25를 2진법으로 변환해보자.
25 / 2 ===> 몫: 12 , 나머지:1
12/2 ===> 몫:6 , 나머지:0
6/2 ===> 몫:3 , 나머지: 0
3/2 ===> 몫:1, 나머지: 1
1/2 ===> 몫:0, 나머지:1
몫이 0이 되었을때 나머지 값들을 역순으로 읽는다 11001
10 진법의 수를 몫이 0이 되기 전까지 계속 n 의 값으로 나누면서 나머지를 저장한다.
그리고 몫이 0이 되었을때 역순으로 값을 읽는다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int num = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
while(num>0){
int k=num%n; // 나머지
num=num/n; // 몫
if(k>=10){ // 나머지 10이상인 경우 문자로 치환
sb.append((char)(k+55));
}
else {
sb.append(k);
}
}
// 역순으로 출력
bw.write(sb.reverse().toString());
bw.flush();
bw.close();
br.close();
}
}
처음에 몫=0 이 되었을때 값을 역순으로 읽기 때문에 스택에서 값을 빼내는 방식으로 생각했었다. 하지만 스택에 넣은 값을 빼내는 것도 좋지만 문자열에 넣고 값을 거꾸로 꺼내는 방식도 괜찮은 것 같다.
✅정리
StringBuilder 에서 reverse 메서드를 사용하면 값을 거꾸로 꺼낼 수 있다. 이후 toString 메서드를 이용하여 문자열로 바꿔서 출력하면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1707 이분 그래프 자바 (0) | 2024.11.22 |
---|---|
[백준] 1929 소수 구하기 자바 (1) | 2024.11.19 |
[백준] 11047 동전0 자바 (0) | 2024.11.18 |
[백준] 1167번 트리의 지름 (0) | 2024.10.30 |