문제 링크 : https://www.acmicpc.net/problem/11005
난이도 |
알고리즘 | |
브론즈1 | 수학, 구현 |
1. 요구 사항 이해
시간, 메모리 제한 : 0.5초 / 256MB
주어진 10진법 수 N을 B진법으로 출력하라. (2 ≤ B ≤ 36)
*N은 10억보다 작거나 같은 자연수
2. 설계/검증
입력
- N : 10진법 자연수
- B : 변환할 진법
설계 :
진법으로 나누기에서 목과 나머지
- 나머지 10 미만
- 나머지 10 이상 : 알파벳 사용 A는 10~ Z는 35
시간 복잡도 | 최악의 경우 | 공간 복잡도 |
O(log(N)) | 18.42 | O(1) |
3. 정상 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner 객체 생성
Scanner sc = new Scanner(System.in);
// 10진법 수 N과 진법 B 입력
long N = sc.nextLong(); // 10진법 수
int B = sc.nextInt(); // 진법
// B진법으로 변환된 결과 출력
String result = convertToBaseB(N, B);
System.out.println(result);
// Scanner 객체 닫기
sc.close();
}
// 10진법 수를 B진법으로 변환하는 메소드
private static String convertToBaseB(long N, int B) {
// 결과를 저장할 StringBuilder 객체 생성
StringBuilder sb = new StringBuilder();
// N이 0보다 클 때까지 반복하여 B진법으로 변환
while (N > 0) {
// N을 B로 나눈 나머지 계산
long remainder = N % B;
// 나머지가 10보다 작으면 그대로 추가,
// 그 이상이면 문자로 변환하여 추가
if (remainder < 10) {
sb.insert(0, remainder);
} else {
char digit = (char) ('A' + remainder - 10);
sb.insert(0, digit);
}
N /= B;
}
return sb.toString();
}
}
4. 처리 과정 추적 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Scanner 객체 생성
Scanner sc = new Scanner(System.in);
// 10진법 수 N과 진법 B 입력
long N = sc.nextLong(); // 10진법 수
int B = sc.nextInt(); // 진법
// B진법으로 변환된 결과 출력
String result = convertToBaseB(N, B);
System.out.println("\n[결과]----------------------------------");
System.out.println(result);
// Scanner 객체 닫기
sc.close();
}
// 10진법 수를 B진법으로 변환하는 메소드
private static String convertToBaseB(long N, int B) {
// 결과를 저장할 StringBuilder 객체 생성
StringBuilder sb = new StringBuilder();
System.out.println("\n[변환과정]----------------------------------");
// N이 0보다 클 때까지 반복하여 B진법으로 변환
while (N > 0) {
// N을 B로 나눈 나머지 계산
long remainder = N % B;
System.out.println("현재 나머지: " + remainder);
// 나머지가 10보다 작으면 그대로 추가,
// 그 이상이면 문자로 변환하여 추가
if (remainder < 10) {
sb.insert(0, remainder);
System.out.println("추가된 숫자: " + remainder);
} else {
char digit = (char) ('A' + remainder - 10);
sb.insert(0, digit);
System.out.println("추가된 문자: " + digit);
}
N /= B;
System.out.println("나눈 결과: " + N);
}
return sb.toString();
}
}
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 백준' 카테고리의 다른 글
[백준](2024)ACM 호텔(설명/코드/정답) (0) | 2024.02.22 |
---|---|
[백준](2024) 회문인 수 (설명/코드/정답) (0) | 2024.02.21 |
[백준](2024) 유레카 이론 (설명/코드/정답) (0) | 2024.02.21 |
[백준](2024) 줄세우기 (설명/코드/정답) (0) | 2024.02.20 |
[백준](2024) 성 지키기 (설명/코드/정답) (0) | 2024.02.20 |