https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이 과정

N의 배수 번호인 양을 세면서 모든 숫자를 다 볼려면 양을 몇번 봐야 하는지 구하는 문제이다.

 

문제 그대로 모든 숫자를 다 볼 때 까지 계속 양을 센 횟수에 N을 더해주면 된다. 숫자를 모두 봤는지 판별할 때 어떤 숫자가 나왔는지를 저장하는 사이즈 10의 배열을 선언할 수도 있겠지만 비트마스킹을 사용해서 좀 더 빠르게 판단할 수 있다.


소스 코드

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

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        for (int tc = 1; tc <= T; tc++) {
            int N = Integer.parseInt(br.readLine()); // 문제의 입력 N
            int visited = 0; // 현재까지 본 숫자를 bit로 표현한 수, 2-4-5를 봤다면 0000110100 (2)
            int target = (1 << 10) - 1; // 1111111111 (2) -> visited == target이면 모든 숫자 관찰
            int answer = 0; // 양을 몇 번 세었는지 저장한다

            while (visited != target) { // 모든 숫자를 볼 때 까지 반복한다
                answer += N; // 양을 N번 더 센다
                char[] ch = String.valueOf(answer).toCharArray(); // 숫자를 문자열로 변환 후 문자 배열로 저장한다
                for (char c : ch) {
                    int num = c - '0'; // 문자 배열의 각 문자를 숫자 값으로 받는다
                    visited = visited | (1 << num); // 현재까지 본 숫자를 비트마스킹으로 표시해준다
                }
            }
            System.out.printf("#%d %d\n", tc, answer);
        } // end of testcase
    } // end of main
} // end of class

 

+ Recent posts