리뷰
성공
- char타입 계산 실수가 여러번 있었다.
공부한 것
- 제곱 메소드 : Math.pow(double A, double B) = A의 B승
- char타입 값이 숫자인지 확인하는 메소드 : boolean Character.isDigit(char C)
- char타입 연산 방법 정리
//주요 아스키코드
문자 <-> ASCII CODE
0 <-> 48
A <-> 65
a <-> 97
//char타입 비교 시 따옴표 붙이기
n.charAt(i) == 1 //(x)
n.charAt(i) == '1' //(o)
//char타입 숫자를 int로 변환하려고 할 때, (int)를 붙이면 아스키코드 값이 반환된다.
//char타입 숫자 - '0' 을 하면 유니코드로값으로 연산 후 10진수와 동일한 값을 반환한다.
arrn[i] = (int)n.charAt(i); //(x)
arrn[i] = n.charAt(i) - '0'; //(o)
arrn[i] = n.charAt(i) - 48; //(o)
문제
더보기
문제
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.
10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.
A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35
입력
첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)
B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.
출력
첫째 줄에 B진법 수 N을 10진법으로 출력한다.
예제 입력 1 복사
ZZZZZ 36
예제 출력 1 복사
60466175
내 답안
1.
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 token = new StringTokenizer(br.readLine());
String n = token.nextToken();
int b = Integer.parseInt(token.nextToken());
int result = 0;
int arrresult[] = new int[n.length()];
ArrayList<Integer> list = new ArrayList<>();
int arrn[] = new int[n.length()];
for (int i = n.length() - 1; i >= 0; i--) {
list.add((int) Math.pow(b, i));
}
for (int i = 0; i < n.length(); i++) {
if (n.charAt(i) == '0' || n.charAt(i) == '1' || n.charAt(i) == '2' || n.charAt(i) == '3'
|| n.charAt(i) == '4' || n.charAt(i) == '5' || n.charAt(i) == '6' | n.charAt(i) == '7'
|| n.charAt(i) == '8' || n.charAt(i) == '9') {
arrn[i] = n.charAt(i) - '0';
} else {
arrn[i] = n.charAt(i) - '7';
}
}
for (int i = 0; i < n.length(); i++) {
arrresult[i] = arrn[i] * list.get(i);
}
for (int k : arrresult) {
result += k;
}
bw.write(result + "\n");
bw.flush();
}
}
2. 리팩토링 - Character.isDigit() 사용, 차수를 1씩 감소시키는 for문 제거 후 단일 증감문으로 대체.
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 token = new StringTokenizer(br.readLine());
String n = token.nextToken();
int b = Integer.parseInt(token.nextToken());
int result = 0;
int arrn[] = new int[n.length()];
int degree = n.length() - 1;
for (int i = 0; i < n.length(); i++) {
if (Character.isDigit(n.charAt(i))) {
arrn[i] = n.charAt(i) - '0';
} else {
arrn[i] = n.charAt(i) - '7';
}
result += arrn[i] * (int) Math.pow(b, degree--);
}
bw.write(result + "\n");
bw.flush();
}
}
'ALGORITHM' 카테고리의 다른 글
백준 11650 좌표 정렬하기 [JAVA] (1) | 2024.02.06 |
---|---|
백준 1620 나는야 포켓몬 마스터 이다솜 [JAVA] (1) | 2024.01.28 |
백준 10815 숫자 카드 [JAVA] (1) | 2024.01.09 |
백준 1934 최소공배수 - 3가지 방법 [JAVA] (1) | 2024.01.02 |
백준 10809 알파벳 찾기 [JAVA] (0) | 2023.12.17 |