문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18_yw6I9MCFAZN&
코드
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