개요 백준 문제 2745번을 풀면서 어려웠던 점과 코드를 정리한다. 소요 시간 : 30분https://www.acmicpc.net/problem/2745
문제 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, …, F: 15, …, Y: 34, Z: 35
코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <iostream> #include <stack> using namespace std; void solve() { string inputStr; int digit; long long result = 0; int curNum = 0; stack<int> s; cin >> inputStr >> digit; for(int i=0;i<inputStr.size();i++) { if (inputStr[i] >= '0' && inputStr[i] <= '9') { curNum = inputStr[i] - '0'; } else { curNum = inputStr[i] - 'A' + 10; } s.push(curNum); } int stackSize = s.size(); int digitTmp = 1; for(int i=0;i<stackSize;i++) { curNum = s.top(); s.pop(); result = result + curNum * digitTmp; digitTmp *= digit; } cout << result; } int main() { solve(); }
풀이
조건(알파벳 - 숫자 맵핑)에 맞춰 숫자로 변환한 값을 스택에 넣는다.
스택에 넣었으므로 입력된 순서의 역 즉 1의 자리부터 계산할 수 있다.
진수에 맞춰 자리수를 곱하고 값을 더한다.
배울 점, 메모
쉬운 문제지만 꼼꼼히 생각하고 소홀히 하지 말 것
간단한 구현도 꼼꼼하게 생각할 것
쉬운 문제라고 생각을 적게하려는 것 고치기 = 자만하지 않기
쉬운 문제를 풀때도 차분함을 공부한다고 생각하고 임하기