본문 바로가기

코드포스

[Codeforces Round 863 (Div. 3)] E. Living Sequence

 

 


https://codeforces.com/blog/entry/114788

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    int32_t num_tests;
    std::cin >> num_tests;

    for(int32_t t = 0; t < num_tests; t++) {
        int64_t k;
        std::cin >> k;

        std::vector<int32_t> digits;
        while(k > 0) {
            digits.push_back(k % 9);
            k /= 9;
        }
        std::reverse(digits.begin(), digits.end());

        for(int32_t i = 0; i < digits.size(); i++)
            std::cout << (char)(digits[i] < 4 ? (digits[i] + '0') : (digits[i] + '1'));
        std::cout << "\n";
    }
    return 0;
}

 

※.digit에 올 수 있는 수는 0~9, 9가지이다.(4를 제외)

( 9876543210 -> [9][8][7][6][5][4][3][2][1][0] 4는 올수없음)

 

※. k % 9 연산은 digit에 오는 수를 정하는 연산이고

     k / 9 연산은 위의 작업을 하는 횟수이다.( = 자리수)

(k = 9일 때, k % 9 연산은 일의 자리에 오는 수를 정하는 연산 -> 0,

k / 9 연산은 다음 자리에 k % 9 를 하기 위한 연산 -> 십의 자리 -> (k / 9) % 9 -> 1   == [1] [0] )

 

※. digit에 올 수 있는 수는 0~9, 10가지이다.(4를 제외하지 않았을 때)

n의 각 자리수의 숫자를 정하는 방법은

현재 자리수에 0~9, 10가지 숫자중 하나를 정하고

다음 자리수를 구하기 위해 n/10을 한다.

 

그러나 digit에 올수 있는 수는 0~9 (4제외) 9가지이다.

n의 각 자리수의 숫자를 정하는 방법은

현재 자리수에 0~9(4제외) 9가지 숫자중 하나를 정하고

다음 자리수를 구하기 위해 n/9를 한다.

 

※. k/9 연산을 할수록 자리수는 커진다.

string으로 출력할 때 자리수가 큰 숫자부터 더해야 하므로 stack으로 각 자리수를 저장해준다.

 

※. 각 자리수가 4 미만인 경우는 그대로 출력

4 이상인 경우는 + 1을 추가해줘야한다.

(4 -> 5, 5 -> 6, 8 -> 9)

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;


public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		while(T --> 0) {
			long k = Long.parseLong(br.readLine());
			Stack<Integer> stk = new Stack<>();
			while(k > 0) {
				long a = k % 9;
				stk.push((int)a);
				k /= 9;
			}
			while(!stk.isEmpty()) {
				int temp = stk.pop();
				char a = (temp < 4) ? (char)(temp+'0') : (char)(temp+'1');
				sb.append(a);
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}
}