본문 바로가기

SWEA/D2

[SWEA 1288][D2][JAVA] 새로운 불면증 치료법

[문제]

 

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

 

SW Expert Academy

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

www.swexpertacademy.com

[풀이방법]

 

비트 마스크로도 가능하고 boolean 배열을 만들어서 숫자의 사용 유무를 판단하는 방법도 가능합니다. 

 

저는 일단 boolean 배열로 풀었는데 시간이 된다면 비트마스크로 풀어보려고 합니다. 

 

boolean 배열을 10크기로 선언한 후에 각각 0이 쓰이면 visited[0] = true 로 표시하여 해당 숫자가 사용됐음을 표시합니다. 

 

양을 센 시점을 result로 두어서 1부터 증가하도록 하고 N에 result를 곱해서 현재 센 양의 수를 구합니다. 

 

각 자리수를 구해서 쓰인 숫자의 Boolean 배열의 인덱스 값을 true로 선언한 후 모든 boolean 배열이 true가 되면 무한 반복을 빠져나옵니다. 

 

여기서 정답을 구할 때 주의할 점은 민석이가 센 양의 수를 구하는 것이기 때문에 result*N의 값이 정답입니다. (result가 정답 X)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
 
public class Solution {
    static int VISIT = 1 << 10;
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
 
        int T = Integer.parseInt(st.nextToken());
 
        StringBuffer sf = new StringBuffer();
        for (int tc = 1; tc <= T; tc++) {
            st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken());
 
            int[] visited = new int[10];
 
            int result = 1;
            boolean flag = false;
            while(true) {
 
                int temp = N*result;
 
                while(temp > 0) {
                    for (int i = 0; i <= 9; i++) {
                        visited[temp%10|= 1<<temp%10;
                    }
 
                    temp /= 10;
                }
 
//                for (int j = 0; j <= 9; j++) {
//                    System.out.println(visited[j]);
//                }
 
                for (int j = 0; j <= 9; j++) {
 
                    if( visited[j] == 0) {
                        flag = false;
                        break;
                    }
 
                    flag = true;
                }
 
 
                if (flag) break;
                result++;
            }
 
            sf.append("#" + tc + " " + result * N + "\n");
        }
        System.out.println(sf.toString());
    }
}
 
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter