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
'BAEKJOON > 수학' 카테고리의 다른 글
백준 30456번 [바닥수](C++) -yes6686- 티스토리 (1) | 2025.06.14 |
---|---|
백준 33964번 [레퓨닛의 덧셈](C++) -yes6686- 티스토리 (0) | 2025.06.07 |
백준 2903번 [중앙 이동 알고리즘](C++) -yes6686- 티스토리 (0) | 2025.05.23 |
백준 2547번 [사탕 선생 고창영](C++) -yes6686- 티스토리 (0) | 2025.05.21 |
백준 32776번 [가희와 4시간의 벽 2](C++) -yes6686- 티스토리 (0) | 2025.04.30 |