본문 바로가기
Development/Baekjoon

[C#] 2745번: 진법 변환

by Mobics 2025. 9. 4.

목차


    백준 단계별로 풀어보기

    25.09.04

    8단계: 수학 1


    2745번: 진법 변환

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

     

    문제 풀이

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

    - 10진법의 의미

    : 한 자리에 0부터 9까지의 숫자가 표현되며, 한 자리의 수가 10이 될 때마다 자리올림이 발생한다.

     

    → 예시

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

     

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

    : x진법 수의 각 자리 숫자에 현재 자리의 위치만큼 x를 거듭제곱한 수를 곱한 뒤, 모두 더해주면 된다.

     

    → 예시

    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

     

    - MathF.Pow(float f, float p)

    : f의 p제곱을 구해주는 함수

    --> 예시

    MathF.Pow(3, 2) == 9
    MathF.Pow(3, 1) == 3

     

    ※ 참고 링크

    - 공식 문서 : MathF.Pow()

     

    MathF.Pow(Single, Single) 메서드 (System)

    지정된 전원에 대해 발생한 지정된 숫자를 반환합니다.

    learn.microsoft.com

     

    - 블로그

     

    [C#] 알아두면 유용한 자주 쓰는 Mathf 함수 모음

    Mathf.Abs(float f); f의 절대값을 반환해주는 함수 -> ex) 음수나 양수가 모두 들어와도 양수로 값을...

    blog.naver.com

     

    - 아스키 코드 표

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

    >> 풀이

    1. B진법 수, N에 대해 N과 B를 나눠서 입력 받은 뒤, N을 string으로, B를 int로 변수를 만들어 저장한다. 그리고 결과를 출력할 변수를 만든다.
    2. N의 자릿수만큼 반복문을 실행하는데, 우선 각 자릿수에 맞는 숫자로 변환해준다.
      •     값만 따로 받아줄 임시 변수를 선언한다.
      •     값이 0~9 라면 바로 int값으로 변환하여 임시 변수에 담는다.
      •     값이 A~Z 라면 아스키코드에 따라 55만큼 빼주면 10~35가 되기 때문에 55를 빼서 임시 변수에 담는다.
    3. 변환한 값을 10진수로 바꿔서 결과값에 더하는 것을 반복 횟수만큼 반복한다.
    4. 결과값을 출력한다.

     

    정답 코드

    class Backjoon
    {
        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split();
            string arr = input[0];
            int formation = int.Parse(input[1]);
            int result = 0;
    
            for (int i = 0; i < arr.Length; i++)
            {
                int temp = 0;
                if (arr[i] >= 'A' && arr[i] <= 'Z')
                {
                    temp = arr[i] - 55;
                }
                else
                {
                    temp = int.Parse(arr[i].ToString());
                }
    
                result += temp * (int)MathF.Pow(formation, arr.Length - 1 - i);
            }
            Console.Write(result);
        }
    }

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

    [C#] 2720번: 세탁소 사장 동혁  (0) 2025.09.08
    [C#] 11005번: 진법 변환 2  (0) 2025.09.06
    [C#] 2563번: 색종이  (0) 2025.09.03
    [C#] 10798번: 세로읽기  (0) 2025.09.02
    [C#] 2566번: 최댓값  (4) 2025.08.29