문제 : boj14382
INSOMNIA인 경우부터 생각해보자. 일단 각 자리 중 1~9중 어느 수라도 들어가면 배수에서 모든 수가 나타날 수 있다. 따라서 INSOMNIA인 경우는 n이 0인 경우 하나 뿐이다.
그 외의 경우는 실제로 n, 2n, 3n, ...을 해보면서 각 자리수에 포함된 숫자들을 찾아내어 모든 수를 찾았는지 확인하면 된다. 모든 수를 찾는 것은 미리 0~9까지를 넣은 해시를 준비해두고 찾을 때 마다 remove 후 size를 확인해봐도 될테고, 내 경우엔 remain=10 과 boolean 배열을 두고 새로운 수를 찾으면 remain을 감소시켜서 remain이 0이 되면 모두 찾은것으로 판단했다.
코드 : github
import java.io.DataInputStream;
import java.io.IOException;
public class Main extends FastInput {
private int remain;
boolean[] chk;
private boolean chkNum(int num) {
while (num != 0) {
int cur = num%10;
num/=10;
if (chk[cur]) continue;
if (--remain == 0)
return true;
chk[cur] = true;
}
return false;
}
private void solution() throws Exception {
int t = nextInt();
StringBuilder sb = new StringBuilder();
for (int tc = 1; tc <= t; tc++) {
int n = nextInt();
if (n == 0) {
sb.append("Case #").append(tc).append(':').append(' ').append("INSOMNIA").append('\n');
continue;
}
remain = 10;
chk = new boolean[10];
int num = n;
while(!chkNum(num)) {
num+=n;
}
sb.append("Case #").append(tc).append(':').append(' ').append(num).append('\n');
}
System.out.print(sb);
}
public static void main(String[] args) throws Exception {
initFI();
new Main().solution();
}
}
class FastInput {
private static final int DEFAULT_BUFFER_SIZE = 1 << 16;
private static DataInputStream inputStream;
private static byte[] buffer;
private static int curIdx, maxIdx;
protected static void initFI() {
inputStream = new DataInputStream(System.in);
buffer = new byte[DEFAULT_BUFFER_SIZE];
curIdx = maxIdx = 0;
}
protected static int nextInt() throws IOException {
int ret = 0;
byte c = read();
while (c <= ' ') c = read();
do {
ret = ret * 10 + c - '0';
} while ((c = read()) >= '0' && c <= '9');
return ret;
}
private static byte read() throws IOException {
if (curIdx == maxIdx) {
maxIdx = inputStream.read(buffer, curIdx = 0, DEFAULT_BUFFER_SIZE);
if (maxIdx == -1) buffer[0] = -1;
}
return buffer[curIdx++];
}
}
'PS > BOJ' 카테고리의 다른 글
백준 14413 자바 - Poklon (BOJ 14413 JAVA) (0) | 2021.12.11 |
---|---|
백준 7585 자바 - Brackets (BOJ 7585 JAVA) (0) | 2021.12.11 |
백준 1011 자바 - Fly me to the Alpha Centauri (BOJ 1011 JAVA) (0) | 2021.12.08 |
백준 14003 JAVA - 가장 긴 증가하는 부분 수열 5 (BOJ 14003 JAVA) (0) | 2021.12.08 |
백준 22865 자바 - 가장 먼 곳 (BOJ 22865 JAVA) (0) | 2021.12.07 |
댓글