문제
백준 1862번 미터계 https://www.acmicpc.net/problem/1862
1862번: 미터계
첫째 줄에 미터계에 표시된 거리가 주어진다. 단, 이 거리는 정수이고, 1 이상 999,999,999 이하이다.
www.acmicpc.net
코드
#include<iostream>
#define ll long long
using namespace std;
string n;
ll ans;
int toD(int num) {
if (num < 4) return num;
else return num - 1;
}
int main() {
cin >> n;
int base;
for (int i = 0; i < n.length(); i++) {
ans = ans * 9 + toD(n[i] - '0');
}
cout << ans;
}
풀이방법
0,1,2,3,5,6,7,8,9를 이용한 9진법으로 표현된 수를 10진법으로 바꾼다.
문자열에 미터계 수를 입력받고, 각 자리 수에 대하여 toD()함수를 수행시키며 10진법으로 바꿔준다. toD()함수는 인자로 받아온 숫자가 3이하라면 값을 그대로 반환하고, 인자로 받아온 숫자가 4보다 크다면, 그보다 1 작은 값을 반환한다. 4가 없어서 꼬인 9진법에서 0~8을 이용하도록 바꾸는 역할을 한다.
고민과정
처음에 숫자를 그냥 정수로 입력받았다가 각 자릿수에 접근하기가 어려워서 문자열로 바꿔서 입력받았다.