본문 바로가기
PS/BOJ

백준 18295 자바 - Ants (BOJ 18295 JAVA)

by Nahwasa 2022. 3. 6.

문제 : 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();
    }
}

댓글