728x90
문제

분석
1. 제한시간 1초 => 약 1억번만 계산 해야됨
2. ZZZZZ => (Z*36^4) + (Z*36^3)... + (Z*36^0)
=> 각 위치의 값 * binary^자리 의 합으로 계산하면 될듯...!
테스트 코드 1
import java.util.HashMap;
import java.util.Scanner;
public class BinaryScale {
public static void main(String[] args) {
// Scanner 생성
Scanner sc = new Scanner(System.in);
String[] text = sc.nextLine().split(" ");
String num = text[0];
int binary = Integer.parseInt(text[1]);
sc.close();
Long answer = 0L;
for (int i = 0; i < num.length(); i++) {
answer += (int)num.charAt(i) * (int)Math.pow(binary, num.length()-1-i);
}
System.out.println(answer);
}
}
- 실패....
=> 0~9 까지의 범위를 아스키코드로 계산하니까 - 값이 나옴....
테스트코드 2
import java.util.HashMap;
import java.util.Scanner;
public class BinaryScale {
// https://www.acmicpc.net/problem/2745
// 1초라서 1억번 연산 하기 전에 끝내야함.
// 아래 코드로 했을때 런타임 에러가 계속 나옴....
// 어디서 오래걸리는걸까
// int fNum = 0; 값을 for문 밖에 선언하니까 됬음...
public static void main(String[] args) {
long answer = 0;
// Scanner 생성
Scanner sc = new Scanner(System.in);
String[] text = sc.nextLine().split(" ");
sc.close();
String num = text[0];
int binary = Integer.parseInt(text[1]);
for (int i = 0; i < num.length(); i++) {
int fNum = 0;
char c = num.charAt(i);
if (c >= '0' && c <= '9') {
fNum = c - '0';
} else {
fNum = c - 55;
}
answer += fNum * Math.pow(binary, num.length()-1-i);
}
System.out.println(answer);
}
}
- 런타임 에러...
어디서 에러가 날지 한참 헤매다가 fNum의 값을 계속 생성하는 부분이 걸려서 밖으로 빼보니 해결됨...
=> 변수를 계속 생성하면 메모리를 계속 잡아먹는다는걸 간과했다...
728x90
반응형
LIST
'Etc > 알고리즘' 카테고리의 다른 글
| [백준] 19532 (0) | 2024.06.18 |
|---|---|
| [백준] 2231 (0) | 2024.06.18 |
| [백준] 2798 (0) | 2024.06.18 |
| [백준] 24262 (0) | 2024.06.11 |
| [백준] 11005 (0) | 2024.06.04 |