문제 : boj18295
100자리 수가 입력으로 들어오는 것은 의미가 없다. 어차피 N이 최대 10^6 이므로, 아무리 커봐야 출력의 최대치는 10^6+1 가 될 것이다.
따라서 입력으로 들어온 수가 10^6 이외의 7자리 이상의 수라면 그냥 무시하면 되므로 100자리에 겁먹을 필요는 없다. 또한 음수도 그냥 바로 무시하면 된다. 이와 같이 한다면 그냥 String으로 받고 음수 및 7자리 이상의 판단은 간단히 되므로 BigInteger로 받지 않고도 입력받은 수를 정수로 표현할 수 있다. 따라서 굳이 HashSet 등을 쓰지 않고도 10^6+1 까지를 표현할 수 있는 배열로 체크할 수 있다.
이 문제에서 맞왜틀을 좀 외쳤는데, 'simply picks the first natural number'라고 자연수라고 해놓고 사실 0부터를 자연수로 치는 정의를 따르는 문제이기 때문이다. 처음엔 당연히 1부터겠네 생각했다가, 틀렸길래 맞왜틀 외치다가 얼핏 자연수 정의가 좀 모호하다는걸 들은적이 있어 0부터 출력되게 하니 통과됬다. 추가로 찾아보니 확실히 불명확한 것 같다. 교육과정상에서 배운바로는 1부터가 맞긴한데, 때에 따라 0부터 자연수로 치기도 한다고 한다. 뭐 문제에서도 '(i.e., nonnegative integer)' 라고 써져있다.
코드 : github
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
boolean[] chk = new boolean[1000002];
while (n-->0) {
String cur = br.readLine();
if (cur.charAt(0)=='-' || cur.length()>6 && !cur.equals("1000000")) continue;
chk[Integer.parseInt(cur)] = true;
}
for (int i = 0; i <= 1000001; i++) {
if (!chk[i]) {
System.out.println(i);
return;
}
}
}
public static void main(String[] args) throws Exception {
new Main().solution();
}
}
'PS > BOJ' 카테고리의 다른 글
백준 20156 자바 - 기왕 이렇게 된 거 암기왕이 되어라 (BOJ 20156 JAVA) (0) | 2022.03.08 |
---|---|
백준 1765 자바 - 닭싸움 팀 정하기 (BOJ 1765 JAVA) (0) | 2022.03.07 |
백준 16951 자바 - 블록 놀이 (BOJ 16951 JAVA) (0) | 2022.03.05 |
백준 24039 자바 - 2021은 무엇이 특별할까? (BOJ 24039 JAVA) (0) | 2022.03.04 |
백준 2312 자바 - 수 복원하기 (BOJ 2312 JAVA) (0) | 2022.03.03 |
댓글