하찮은 19학번 컴공대생
yoonbot's devlog

백준 오답노트 (BOJ) 🚩/브론즈 (Bronze) 🥉

< BOJ Bronze V > 1550 : 16진수

yoonbot_code 2022. 4. 3. 20:47
 

1550번: 16진수

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.

www.acmicpc.net

 

1. 목적: 16진수를 입력 받아서 10진수로 출력한다. 

2. 해결책:

   0. 보통 16진수를 10진수로 변환할 떄 16^n x (nth coefficient) + 16^(n - 1) x (n - 1th coefficient) ... + 16^0 x first coefficient) 식으로 계산한다. 참고로 first coefficient는 1자리의 수이다. 

   1. 한 변수는 입력 받을 16진수를 string 값으로 저장한다

   2. 반복문을 16진수의 길이 값만큼 각 숫자를 내림차 순으로 (거꾸로, 1자리 수 부터) 읽고 string 값을 구한다. 

      a. 만약 0~9 숫자면 캐릭터 '0'에서 빼면 정수 값이 나온다. 

      b. 만약 숫자가 아닌 알파벳 캐릭터이면 (16진수는 A = 10, B = 11, C = 12, ... ) A 만큼 더하면 10진수 값이 나오니 그 수를 반환한다. 

   3. 기억해야 할 점** 16만 계속 곱하는게 아니라 변수가 처음에는 16으로 변하고, 다음 계산마다 16씩이나 곱해진다는 점을 까먹지 말자. 

 

3. 소스코드:

C++

#include <iostream>
#include <string>
using namespace std;

int main(){
    string input;
    int sum = 0, temp = 1;
    cin >> input;

    for (int i = input.length() - 1; i >= 0; i--){
        if(input[i] >= '0' && input[i] <= '9')
            sum += (input[i] - '0') * temp;
        else
            sum += (input[i] - 'A' + 10) * temp;
        temp *= 16;
    }
    cout << sum;

    return 0;
}