코딩테스트
특정 수 제외하기(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;
}