본문 바로가기

algorithm/기타

[C++] BOJ 1862 미터계

문제

백준 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을 이용하도록 바꾸는 역할을 한다. 

고민과정

처음에 숫자를 그냥 정수로 입력받았다가 각 자릿수에 접근하기가 어려워서 문자열로 바꿔서 입력받았다.