https://www.acmicpc.net/problem/27650
27650번: 마법박스
다음을 표준 출력 스트림(stdout)으로 한 줄에 출력하여, $i$ 이하의 $2$ 이상의 양의 정수가 마법박스에 모두 들어있는지 질의할 수 있다. 질의에 대한 답변은 모두 들어있다면 $1$, 그렇지 않다면 $0
www.acmicpc.net
헷갈리는 입출력 방식은 차치하자. 먼저 문제에서 묻는 바가 무엇인지부터 이해해야 한다. 문제 난이도가 올라갈 수록 이게 더 어려워지는 것 같다.
무지가 찾는 수는 박스에 들어있지 않은 가장 작은 소수이다. 만약 N보다 작으면서 소수가 아닌 수가 박스에 들어있지 않다면, ex) 49 마법박스의 성질에 따라 그 수를 소인수분해한 결과 역시 박스에 들어있으면 안 된다. ex) 7 따라서 찾는 수는 반드시 소수이다.
2부터 500만까지의 정수 중 소수의 개수가 못해도 10만개는 될 것이다. 프로그램이 2, 3, 5, ... 오름차순으로 질문했다가는 100도 가기 전에 프로그램이 종료된다. 백준 좀 치는 사람들은 여기서 이분탐색을 떠올렸을 것이고, 나같은 약자들은 밑의 '알고리즘 분류'를 읽고 이분탐색을 적용해보면 된다.
우리의 응답이 1일 경우 i까지의 정수는 모두 존재한다는 뜻이므로 범위의 오른쪽을 탐색하고, 0일 경우 왼쪽이나 현재 위치에 존재하지 않는 정수가 있다는 뜻이므로 범위의 왼쪽을 탐색하면 된다.
'백준' 카테고리의 다른 글
백준 27499 - 레이저 쏘기 (0) | 2023.08.05 |
---|---|
백준 16563 - 어려운 소인수분해 (0) | 2023.08.05 |
백준 15824 - 너 봄에는 캡사이신이 맛있단다 (0) | 2023.08.02 |
백준 1456 - 거의 소수 (0) | 2023.08.02 |
백준 1016 - 제곱 ㄴㄴ 수 (0) | 2023.08.02 |