반응형
‼️만약 진법이 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";
}
반응형
'Algorithm 💫 > Problem Solving' 카테고리의 다른 글
[백준 1707번 이분 그래프(DFS)/ C++] (0) | 2021.01.22 |
---|---|
[백준 11724번 연결 요소의 개수(BFS, DFS)/ C++] (0) | 2021.01.22 |
[백준 11053번 가장 긴 증가하는 부분 수열 / C++] (0) | 2021.01.08 |
[백준 2193번 이친수/ C++] (0) | 2021.01.07 |
[백준 11057번 오르막 수/ C++] (0) | 2021.01.07 |
댓글