Skip to content

Conversation

@0224LJH
Copy link
Contributor

@0224LJH 0224LJH commented Oct 19, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/1637

🧭 풀이 시간

70분

👀 체감 난이도

✏️ 문제 설명

정수가 여러 개 모여 있는 정수더미가 있다. 그 안에 어떤 특정한 정수 하나만 홀수개 존재하고 나머지 정수는 모두 짝수개 존재한다. 정수더미 속에서 날카로운 눈을 이용해 홀수개 존재하는 정수를 찾아야 하는 문제이다.

첫째 줄에 입력의 개수 N이 주어진다. N은 1이상 20,000이하인 수이다. 그 다음 줄부터 N줄에 걸쳐 세 개의 정수 A, C, B가 주어지는데, 이것은 A, A+B, A+2B, ..., A+kB (단, A+kB ≦ C) 의 정수들이 정수더미 안에 있다는 것을 나타낸다. A, B, C는 1보다 크거나 같고 2,147,483,647보다 작거나 같은 정수이다. 정수더미는 N개의 입력이 나타내는 정수들을 모두 포함한다.

🔍 풀이 방법

단순히 배열을 만들고 저장하기에는 너무나도 많은 수가 만들어지기에 무조건 메모리가 터진다.
고민하다가 힌트를 보니 이분탐색을 하라고 했다.

그래서 곰고히 생각해보니, 정답이 없는 경우를 제외하면 항상 총 갯수는 항상 홀수이다.
그렇기에 특정 숫자를 검사할 때, 그 숫자가 몇번 나오는지, 그리고 그 숫자 이하의 숫자는 총 몇번 나오는지를 계산하면된다.

예를들어 num을 확인할 경우, num이하의 숫자의 개수를 찾는다. num이하의 숫자가 나온 총 횟수를 f(num)이라 하자.

1.f(num)이 짝수인 경우 -> 정답이 되는 숫자는 num보다 크다.
2-1. f(num)이 홀수이고, num자체가 짝수개 or 존재 x -> 정답이 되는 숫자가 num보다 작다
2-2. f(num)이 홀수이고, num자체가 홀수개 존재 -> 정답!!

이를 통해 이분탐색으로 풀며된다. 이러면 20000 * log(21억) 이기에 시간복잡도도 문제 없다!

⏳ 회고

맨날 하던 방식을 벗어나서 신기한 방식의 이분탐색이었다.

@0224LJH 0224LJH added success 👍 해설을 보지 않고 풀었을 때 hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 labels Oct 19, 2025
@ShinHeeEul ShinHeeEul merged commit 3eb1cc5 into main Oct 19, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 success 👍 해설을 보지 않고 풀었을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants