[문제]
[풀이방법]
비트 마스크로도 가능하고 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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
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++) {
// }
for (int j = 0; j <= 9; j++) {
if( visited[j] == 0) {
flag = false;
break;
}
flag = true;
}
if (flag) break;
result++;
}
}
System.out.println(sf.toString());
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'SWEA > D2' 카테고리의 다른 글
[SWEA 1204][D2][JAVA] [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2019.05.19 |
---|---|
[SWEA 1284][D2][JAVA] 수도 요금 전쟁 (0) | 2019.05.19 |
[SWEA 1940][D2][JAVA] 가랏! RC카 (0) | 2019.05.14 |
[SWEA 1945][D2][JAVA] 간단한 소인수분해 (0) | 2019.05.14 |
[SWEA 1946][D2][JAVA] 간단한 압축 풀기 (0) | 2019.05.09 |