백준 2745번: 진법 변환 + 11005번: 진법 변환2 (JAVA)

won·2023년 4월 4일
0

알고리즘 문제풀이

목록 보기
30/32

2745번: 진법 변환

https://www.acmicpc.net/problem/2745

간단한 구현 문제이다.

각 자릿수를 받은 후 toCharArray() 메소드로 char배열로 만든다.
그 후 한자리씩 검사한다.
char 배열의 요소가 숫자이면 아스키 코드값 '0'인 48을 빼고 각 자릿수에 해당하는 제곱 수를 곱해준 뒤 sum값에 곱한다.
숫자가 아니면 알파벳이므로 아스키 코드 값 'A'인 65를 빼고 같은 방식으로 해준다.
그리고 결과 값을 출력하면 된다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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());
		
		char[] N= st.nextToken().toCharArray();
		int B=Integer.parseInt(st.nextToken());
		
		int sum=0;
		
		for (int i = 0; i < N.length; i++) {
			if(N[i]>='0' && (int)N[i]<='9') {
				sum += ((int)N[i]-48)*Math.pow(B,N.length-i-1);
			}else {
				sum+=((int)N[i]-55)*Math.pow(B,N.length-i-1);
			}
		}
	
		bw.write(String.valueOf(sum));
		bw.flush();
		bw.close();
		br.close();
	}
}

11005번: 진법 변환2

https://www.acmicpc.net/problem/11005

2475번과 비슷한듯 다르다.

ArrayList를 생성 후 while문을 돌려 N을 B로 나눈 나머지 값 들을 저장한다.
반복이 될 때마다 N을 B로 나누고 N/B가 0보다 클때까지만 돌도록 한다.

나머지값이 10보다 작으면 '0'에 해당하는 아스키 코드 값을,
나머지값이 10보다 크면 'A'에 해당하는 아스키 코드값을 더하고 리스트에 추가한다.

출력은 리스트 끝 자리부터 0까지 반대로 출력되도록 해야한다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
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());
		
		int N= Integer.parseInt(st.nextToken());
		int B= Integer.parseInt(st.nextToken());
	
		ArrayList<Character> arr = new ArrayList<>();
		
		while(N>0) {
			int res = N%B;
			N/=B;
			char a;
			if(res>=10) {
				a = (char) (res+'A'-10);
			}else {
				a = (char) (res+'0');
			}
			arr.add(a);
		}
		
		for (int i = arr.size()-1; i >= 0; i--) {
			bw.write(arr.get(i));
		}
		
		bw.flush();
		bw.close();
		br.close();
	}
}
profile
뭐라도 하자

0개의 댓글