본문 바로가기
Baekjoon/[Code.plus] 알고리즘 기초 1/2

[BOJ/백준] 11576 Base Conversion

by 해적거북 2021. 7. 29.
728x90

● [문제번호 11576] Base Conversion

https://www.acmicpc.net/problem/11576

 

11576번: Base Conversion

타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의

www.acmicpc.net

 

● 알아야 할 것

: A 진법 → 10 진법 → B 진법 으로 변환하는 방법

: vector 자료구조와 메소드

 

● 풀이 과정

: 일반적으로 11진법부터는 10 → A,  11 → B, 12 → C, .. 등으로 표현한다.

하지만 주어진 문제의 설명을 확인하면 11진법부터는 10 → 10,  11 → 11, 12 → 12, .. 로 표현한다고 서술되어있다.

그래서 각 자릿수로 입력을 받게 만들어 놓은 것 같다.

 

: A진법의 자릿수는 알고 있지만 B진법의 자릿수는 모르기에

입력과 출력의 vector를 구분하였다.

A진법의 각 자릿수를 입력받고

이를 10진법으로 변환하고

이를 다시 B진법으로 변환하면 된다.

 

● 주의 할 것

: B진법의 자릿수를 모르기에 문제에서 주어진 최대 자릿수(25)로 설정하면 된다.

그러면 변환된 B진법의 수가 25자리가 아니면 앞자리에 0이 있다.

이것까지 함께 출력하면 안되므로 앞자리에 0이 없을 때 까지 index를 옮긴 후 출력해야한다.

 

● 참고 할 것

: A 진법 → 10 진법 / 10 진법 → B 진법 으로 변환하는 방법 이해

https://o.playgm.co.kr/438

 

● 풀이 코드

#include <bits/stdc++.h>

using namespace std;

// 입력 과 출력 vector 각각 선언
vector<int> v_input, v_output;
int A, B, M;
// A진법 -> 10진법으로 변환 할 때 사용할 가중치 weight
// A진법 -> 10진법으로 변환한 수 check_point
int weight, check_point;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    // 입력
    cin >> A >> B;
    cin >> M;
    
    // A진법의 자릿수는 M
    // B진법으로 변환시 최대 자릿수는 25
    v_input.assign(M, 0);
    v_output.assign(25, 0);
    
    // A진법의 각 자릿수 입력
    for(int m = 0; m < M; m++)
        cin >> v_input[m];
    
    // 가중치와 함께 A진법의 수 -> 10진법으로 변환
    weight = 1;
    for(int m = v_input.size() - 1; m >= 0; m--)
    {
        check_point += v_input[m] * weight;
        weight *= A;
    }
    
    // 10진법 -> B진법으로 변환
    for(int m = v_output.size() - 1; m >= 0; m--)
    {
        v_output[m] = check_point % B;
        check_point /= B;
    }
    
    
    // 변환된 B진법의 vector 원소 중 앞에 있는 0 건너뛰기
    int m = 0;
    while(m < v_output.size())
    {
        if(v_output[m] == 0)
            m++;
        else
            break;
    }
    
    // B진법으로 표현된 맨 앞자리 부터 출력
    for( ; m < v_output.size(); m++)
        cout << v_output[m] << " ";
    
    return 0;
}

 

 

● [백준] - [알고리즘 기초 1/2] - [303 - 수학 1 (참고)] 문제집

번호 문제 번호 문제 이름 풀이 링크
1 11005 진법 변환 2 https://pirateturtle.tistory.com/195
2 2745 진법 변환 https://pirateturtle.tistory.com/196
3 11576 Base Conversion https://pirateturtle.tistory.com/197
4 11653 소인수분해 https://pirateturtle.tistory.com/198

 

728x90

댓글