본문 바로가기

BAEKJOON/수학

백준 2745번 [진법 변환](C++) -yes6686- 티스토리

728x90
반응형
SMALL

 

백준 문제 풀이: 2745 [진법 변환]


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

문제 설명:

문자열 형태로 주어진 n진수 숫자를 10진수로 변환하는 문제입니다. 알파벳 A~Z는 10~35의 값을 의미하며, 진법은 최대 36까지 가능합니다.

예를 들어 36진수 "Z"는 10진수로 35, "1A"는 1×361 + 10×360 = 46입니다.


문제 해결 코드


#include <iostream>
#include <math.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    string s;
    cin >> s;
    int b;
    cin >> b;

    int ans = 0;
    for (int i = s.size() - 1; i >= 0; i--) {
        int digit;
        if (s[i] >= 'A') {
            digit = s[i] - 'A' + 10;
        } else {
            digit = s[i] - '0';
        }
        ans += digit * pow(b, s.size() - i - 1);
    }

    cout << ans << '\n';
}
  

코드 설명

  • 핵심 알고리즘: 각 자릿수를 b 진수에서 10진수로 환산
  • 구현 세부사항:
    • 문자가 A 이상인 경우: 'A' - 10을 더해 숫자로 환산
    • 그 외 숫자는 문자 '0'을 빼서 정수화
    • 각 자리의 가중치는 b자리 인덱스
  • 시간 복잡도 분석: O(n) — 입력 문자열 길이만큼 반복

결과

예시 입력:

ZZZZZ
36
  

예시 출력:

60466175
  

직접 구현해보며 진법 변환의 원리를 익힐 수 있는 좋은 연습문제입니다. 다른 방식이나 수학적으로 간소화된 로직이 있다면 댓글로 함께 나눠보세요!

728x90
반응형
LIST