728x90
문제

분석
- 10진수를 b로 나눈 나머지를 쌓는다.
- 0~9를 제외한 나머지들을 아스키로 변환
- 거꾸로 반환
테스트 코드1
package backjun.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
br.close();
int num = Integer.parseInt(s.split(" ")[0]);
int b = Integer.parseInt(s.split(" ")[1]);
String answer = "";
ArrayList<Integer> remain = new ArrayList<>();
int share = num;
while (true) {
share = share / b;
remain.add(num%b);
if (share < b) {
remain.add(share);
break;
}
}
for (int i = remain.size()-1; i >= 0; i--) {
if (remain.get(i) >= 0 && remain.get(i) <= 9) {
answer += remain.get(i);
} else {
answer += (char) (remain.get(i)+55);
}
}
System.out.println("answer : " + answer);
}
}
- 런타임 에러....?
틀리거나, 시간 초과가 아니라 런타임 에러...?
- 시간 문제일 수도 있다는 생각에 코드 수정....
테스트코드2
package backjun.bronze;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
br.close();
long startTime = System.nanoTime();
int num = Integer.parseInt(s.split(" ")[0]);
int b = Integer.parseInt(s.split(" ")[1]);
String answer = "";
ArrayList<Integer> remain = new ArrayList<>();
int share = num;
while (true) {
share = share / b;
remain.add(num%b);
if (share < b) {
remain.add(share);
break;
}
}
for (int i = remain.size()-1; i >= 0; i--) {
if (remain.get(i) >= 0 && remain.get(i) <= 9) {
answer += remain.get(i);
} else {
answer += (char) (remain.get(i)+55);
}
}
System.out.println("answer : " + answer);
long endTime = System.nanoTime();
long timeElapsed = endTime - startTime;
System.out.println("seconds : " + (double)timeElapsed / 1_000_000_000);
}
}
- 또 런타임 에러....?
시간 측정했을때 빨리 나와서 문제 없을줄 알았는데..... 이러고 한참을 헤맸다....
=> 천천히 코드를 확인해보니까 패키지 문제.......!
더보기
package backjun.bronze;
즉, 테스트 환경문제였다...
1. 백준 코드 확인
2. Intellij 소스코드 작성
3. Main class 수정 후 복/붙
4. 런타임 에러
프로그래머스를 주로 이용하다보니까 패키지를 직접 다 입력하는 환경이 익숙치 않다보니까 이런 문제가 발생한듯...
최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
br.close();
long num = Long.parseLong(s.split(" ")[0]);
int b = Integer.parseInt(s.split(" ")[1]);
StringBuilder answer = new StringBuilder();
while (share > 0) {
if (num%b < 10) {
answer.append(num%b);
} else {
answer.append((char) (num%b +55));
}
num /= b;
}
System.out.println(answer.reverse());
}
}
- 마지막에 if문에 비교절을 잘못 적기도 했지만, 틀렸다고 나온것을 확인하고 수정하였음!!!
- StringBuilder를 사용한 이유는 마지막에 값을 reverse 하기 위해서 사용
728x90
반응형
LIST
'Etc > 알고리즘' 카테고리의 다른 글
| [백준] 19532 (0) | 2024.06.18 |
|---|---|
| [백준] 2231 (0) | 2024.06.18 |
| [백준] 2798 (0) | 2024.06.18 |
| [백준] 24262 (0) | 2024.06.11 |
| [백준] 2745 (0) | 2024.06.03 |