Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/백준

[백준](2024) 진법 변환 2 (설명/코드/정답)

_hyeri 2024. 2. 21. 20:32

 

문제 링크 : 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();
    }
}