본문 바로가기
Algorithm 💫/Problem Solving

[백준 2745번 진법 변환 / C++]

by 돼지고기맛있다 2021. 1. 21.
반응형

‼️만약 진법이 36이라면 한자리당 36만큼의 수, 그리고 그 다음수는 36의 제곱이 담긴 수가 합쳐져서 나오는 것. 진법이라는 것은 어떠한 숫자를 어떻게 표현하는지에 대한 방법을 지칭하며 36진법이란 36개의 숫자를 이용해서 표현한다는 것이다. (0~35)

 

for (int i = s.size() - 1; i >= 0; i--)

 

 

"ZZZZZ"가 있을 때 가장 오른쪽부터 각 자리수는 36^4,36^3,36^2,36^1,36^0으로 카운트 된다.

그렇기 때문에 s.size()-1부터 0 까지 for문을 돌리며 각 자리수를 맞춰주는 것!

 

 

알파벳이 "A"이상인 경우 다음과 같이 알파벳 대문자를 사용한다.

if (s[i] >= 'A') ret += (int)pow(n, cnt) * ((int)s[i] - 'A' + 10);

 

만약 알파벳이 'A'이면 'A'-'A'는 0 일거고 +10 을 해주면 A, B, C 순으로 갈 때 10,11,12,13,14 순으로 숫자가 세어진다.

 

else ret += (int)pow(n, cnt) * ((int)s[i] - '0');

그 외에 숫자의 범위가 0~9 사이인 경우에는 char를 숫자로 변형해주기 위해서 -'0'(=48)을 해주면 된다!

 

eg1) '0'-'0'=0

eg2) '1'(49)-'0'(48)=1

 

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

int main()
{
    int n, result;
    string s;
    int count = 0;

    cin >> s >> n;

    for (int i = s.size() - 1; i >= 0; i--) {
        if (s[i] >= 'A' && s[i] <= 'Z')
            result += (int)pow(n, count) * ((int)s[i] - 'A' + 10);
        else
            result += (int)pow(n, count) * ((int)s[i] - '0');
        count++;
    }
    
    cout << result << "\n";
}

 

 

https://shaeod.tistory.com/228

 

반응형

댓글