728x90
[BOJ 11005] 진법 변환 2 - 수학
문제 링크
문제 요약
- 10진법 수 N을 B진법(2~36진법)으로 변환하여 출력하는 문제
- 10 이상의 값은 A(10), B(11), ..., Z(35)로 표현
접근 방법
- 진법 변환 알고리즘: N을 B로 나눈 나머지를 구하고, N을 B로 나눈 몫으로 갱신하는 과정을 반복
- 나머지가 0~9이면 숫자로, 10~35이면 알파벳 A~Z로 변환
- 나머지를 구하는 순서가 역순이므로 마지막에 문자열을 뒤집어야 함
풀이 코드
#include <iostream>
#include <string>
#include <algorithm>
int main() {
int n(0);
int b(0);
std::cin >> n >> b;
std::string result;
// N을 B진법으로 변환
while (n > 0) {
int remainder(n % b);
// 나머지가 10 미만이면 숫자, 10 이상이면 알파벳
if (remainder < 10) {
result += ('0' + remainder);
} else {
result += ('A' + remainder - 10);
}
n /= b;
}
// 결과를 뒤집어서 출력 (역순으로 계산되었으므로)
std::reverse(result.begin(), result.end());
std::cout << result << "\n";
return 0;
}
시간/공간 복잡도
- 시간: O(log_B N) - N을 B로 나누는 횟수만큼 반복
- 공간: O(log_B N) - 결과 문자열 길이
728x90
'코딩테스트' 카테고리의 다른 글
| [BOJ 2903] 중앙 이동 알고리즘 - 수학 (0) | 2025.12.09 |
|---|---|
| [BOJ 2720] 세탁소 사장 동혁 - 그리디 알고리즘 (0) | 2025.12.08 |