문제

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

 

SW Expert Academy

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

swexpertacademy.com

 

코드

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));
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());
        
        for(int t = 1; t <= T; t++){
            int N = Integer.parseInt(br.readLine());

            int k = 0; // 배수 저장
            
            // 9 8 7 6 5 4 3 2 1 0을 봤는지의 여부를 각각 저장함.
            // 0000000000과 같음.
            // 봤을 때 해당 자리를 1로 변경할 것임.
            int visited = 0;

            while (true){
                // k * N하기
                // 현재 센 양 번호를 구하고 char형 배열에 저장
                char[] sheepIdx = Integer.toString(++k * N).toCharArray();

                // 양 번호에 존재하는 숫자를 체크함
                for(int i = 0; i < sheepIdx.length; i++){
                    int num = sheepIdx[i] - '0'; // char 형을 int로 변경
                    
                    // 1. 오른쪽에서 num 자리번째가 1인 이진수 만들기
                    // 1 << num
                    // 2. 기존 visited에 1 표시하기
                    // 위에서 만든 이진수와 OR 연산을 통해 원하는 자리를 1로 변경하기
                    visited = visited | (1 << num);
                }

                // 0 ~ 9까지 모든 숫자를 봤는지 체크
                if(checkAllNumber(visited)) break;
            }

            sb.append("#").append(t).append(" ").append(k*N).append("\n");
        }

        System.out.println(sb.toString());
    }

	
    static final int standardNum = (1 << 10) - 1; // 1111111111. 모든 숫자를 보게 되는 경우
    public static boolean checkAllNumber(int targetNum){
        return targetNum == standardNum;
    }
}

 

728x90

+ Recent posts