본문 바로가기
Development/Baekjoon

[C#] 11005번: 진법 변환 2

by Mobics 2025. 9. 6.

목차


    백준 단계별로 풀어보기

    25.09.06

    8단계: 수학 1


    11005번: 진법 변환 2

    문제 링크 : https://www.acmicpc.net/problem/11005

     

    문제 풀이

    >> 문제를 풀기 위해 알아야 할 개념

    - 10진법을 x진법으로 변환하는 방법

    : 나머지 연산을 사용하여 10진법 수를 변환하고자 하는 진법 값으로 나눈 나머지를 뒤에서부터 표기하면 변환할 수 있다.

    → 예시

    출처 : https://dlxdlx.tistory.com/5

     

    ※ 참고한 블로그

     

    진법의 의미, 그리고 2진법, 8진법, 16진법, 10진법 변환 원리와 방법

    진법(위치값 기수법)의 의미, 그리고 2진법, 8진법, 16진법, 10진법 변환 원리와 방법 목차1. 진법이란2. x진법(2진법, 8진법, 16진법, 10진법)3. 진법 간 변환 원리, 방법x진수 → 10진수10진수 →

    dlxdlx.tistory.com

     

    - StringBuilder.Insert(Index, 개체)

    : 지정된 개체의 문자열 표현을 지정된 Index 번호에 삽입한다.

    --> 이를 활용하여 10진법 수를 x진법으로 변환할 때, 계속 Index 0번에 삽입하여 계산한 값이 뒤에서부터 순차적으로 입력되도록

     

    ※ 공식 문서 - StringBuilder.Insert

     

    StringBuilder.Insert 메서드 (System.Text)

    지정된 개체의 문자열 표현을 지정된 문자 위치에 있는 이 인스턴스에 삽입합니다.

    learn.microsoft.com

     

    - 아스키 코드 표

    출처 : https://sheepone.tistory.com/47

     

    >> 풀이

    1. 10진법 수 N과 B진법의 B를 나눠서 입력 받은 뒤, 둘다 int로 변환하여 저장한다.
    2. while 반복문을 통해 N을 B로 나눈 몫이 0이 될 때까지 즉, N이 B보다 작아질 때까지 N을 B로 나눈 나머지를 구한다.
      •     N을 B로 나눈 나머지가 10보다 작을 경우, 0~9로 표현할 수 있기 때문에 바로 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
      •     N을 B로 나눈 나머지가 10보다 클 경우, A~Z로 표현해야 하기 때문에 임시값으로 문자 변수를 선언하고 아스키코드에 따라 나머지에 55만큼 더해준 다음 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
      •     N을 B로 나눈 값을 N에 대입하여 계속 반복할 수 있도록 한다.
    3. while 반복문을 빠져나오면 마지막으로 N을 위와 같은 원리로 StringBuilder.Insert를 통해 Index 0번 즉, 가장 앞에 값을 삽입한다.
    4. 모든 연산을 마친 값을 출력한다.

     

    정답 코드

    using System.Text;
    
    class Backjoon
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();
            string[] input = Console.ReadLine().Split();
            int num = int.Parse(input[0]);
            int formation = int.Parse(input[1]);
    
            while (num / formation > 0)
            {
                if (num % formation < 10)
                    sb.Insert(0, num % formation);
                else
                {
                    char ch = (char)(num % formation + 55);
                    sb.Insert(0, ch);
                }
                num /= formation;
            }
    
            if (num < 10)
                sb.Insert(0, num);
            else
            {
                char ch = (char)(num + 55);
                sb.Insert(0, ch);
            }
    
            Console.Write(sb.ToString());
        }
    }

    'Development > Baekjoon' 카테고리의 다른 글

    [C#] 2903번: 중앙 이동 알고리즘  (0) 2025.09.09
    [C#] 2720번: 세탁소 사장 동혁  (0) 2025.09.08
    [C#] 2745번: 진법 변환  (0) 2025.09.04
    [C#] 2563번: 색종이  (0) 2025.09.03
    [C#] 10798번: 세로읽기  (0) 2025.09.02