코딩테스트

특정 수 제외하기(9진법)

leeeehhjj 2024. 1. 23. 14:02

숫자를 나열할 때 4가 들어간 수가 있다면 그 수를 제외하고 그 다음 번호를 부여한다.

만약 숫자 N이 주어진다면 이 숫자가 4를 제외하지 않은 원래의 순서를 부여받을 때 몇 번을 부여받을지 출력하시오.

 

풀이 :

0 1 2 3 4 5 6 7 8 9 에서 4가 사라진다면 숫자 N을 10진수가 아닌 9진수라고 생각할 수 있다.

예를 들어 N = 13라는 9진수가 있고 이를 10진수로 변환하면 1x9^1 + 3x9^0 = 9+3 = 12 이다.

하지만 만약 각 자리의 수가 4 이상이라면 예를 들어 5라는 수는 원래 4라는 수이고, 6이라면 원래 5라는 수를 의미하기 때문에 4이상인 수에 대해서는 -1을 해줘야 한다.

 

N=55인 경우 (5-1)x9^1 + (5-1)x9^0 = 36+4 = 40 이다.

 

#include <iostream>
#include <cmath>
using namespace std;
int N;//빌딩의 층수
void InputData(){
    cin >> N;
}

int solve(int num) { 
	int cnt = 0;
	int res = 0;
	while (num > 0) {
		int tmp = num%10;
		if (tmp > 4) tmp -= 1;
		res += pow(9, cnt) * tmp;
		cnt++;
		num /= 10;
	}
	return res;
}

int main(){
    int ans = -1;
    InputData();//입력받는 부분

    //여기서부터 작성
	ans = solve(N);

    cout << ans << endl;//출력하는 부분
    return 0;
}