Processing math: 100%
본문 바로가기

Algorithm/D. Math & Number Theory

50. Pigeonhole Principle

비둘기집의 원리(Pigeonhole Principle)(n+1)개의 물건을 n개의 상자에 빠짐없이 넣은 경우 최소한 한 개의 상자에는 두 개 이상의 물건이 들어간다는 원리로, 보통 비둘기와 비둘기집에 빗대어 표현하기 때문에 이런 이름을 가지게 되었다. 이를 일반화하면 n개의 물건을 m개의 상자에 빠짐없이 넣었을 때 n/m개 이상의 물건이 들어간 상자가 하나 이상 존재한다는 의미가 된다.

 

이 원리를 이용해서 풀 수 있는 문제들의 경우 제대로 접근하지 못하면 괜히 어려운 풀이를 생각하다가 헤매기 쉬우므로 주의해야 한다.

 

[연습문제]

 

BOJ 21099. Four XOR (Platinum V)

더보기

n개의 수의 범위가 10만 이하이므로 여기서 임의로 2개의 수를 골랐을 때 그 수들의 XOR 값은 항상 0 이상 217 미만이다. 이때 4개의 수의 XOR 값은 (2개의 수의 XOR 값) XOR (2개의 수의 XOR 값)과 같으므로 2개의 수를 고르는 방법의 수가 217보다 큰 경우 답은 항상 YES이다. 따라서 n513이면 그냥 YES를 출력하면 되고, 그렇지 않은 경우 2개의 수의 XOR 쌍을 하나씩 확인하면서 같아지는 경우가 있는지 보면 된다. (원래 선형대수적 특성을 이용해서 답이 항상 YES가 되는 n의 범위를 더 줄일 수 있다는 내용이 있었는데, 틀린 것으로 밝혀져서 삭제되었다.)

 

CF 1305C. Kuroni and Impossible Calculation (1600)

더보기

nm보다 큰 경우 그중 m으로 나눈 나머지가 같은 두 값이 최소 한 쌍 이상 존재해서 답이 0이 된다. 그렇지 않다면 n1000이므로 가능한 모든 쌍의 곱을 직접 계산하면 된다.

 

CF 1500A. Going Home (1800)

더보기

두 수의 합이 최대 500만이므로 비둘기집의 원리를 이용할 수 있다. 여기서는 몇 가지 경우를 먼저 처리하는 것이 좋은데, 같은 수가 네 번 이상 등장하는 경우, 두 개의 수가 각각 두 번 이상 등장하는 경우, 한 개의 수가 두 번 이상 등장하는 경우를 차례로 처리하면 모든 수가 서로 다른 경우만 남으므로 가능한 모든 쌍의 합을 하나씩 구하면 서로 다른 합이 최대 500만 개밖에 생기지 않으므로 그보다 많은 개수의 쌍을 확인하면 항상 합이 같은 경우가 나온다.

 

CF 1450C1. Errich-Tac-Toe (Easy Version) (2100)

더보기

ij열을 (i,j)라고 하면 각각의 칸을 (i+j)mod3의 값에 따라 세 그룹으로 나눌 수 있다. 이때 세 그룹 중 최소한 한 그룹은 k/3개 이하의 X를 포함하고 있으므로 그 그룹에 포함된 X를 모두 O로 바꾸면 그리드는 DRAW 상태가 된다.

 

CF 1450C2. Errich-Tac-Toe (Hard Version) (2300)

더보기

Easy Version과 같은 방식으로 칸들을 세 그룹으로 나눈다. 이때 세 그룹 중 한 그룹의 토큰은 모두 X로, 한 그룹의 토큰은 모두 O로 바꾸면 나머지 한 그룹의 토큰들의 상태와 상관없이 그리드를 DRAW 상태로 만들 수 있다. 또한 비둘기집의 원리에 의해 세 그룹에 각각의 상태를 연결하는 6가지 방법 중 최소한 하나는 처음 상태에서 k/3개 이하의 토큰만을 반전해서 만들 수 있다. 풀이는 복잡하지 않지만 실제 대회에서 비둘기집의 원리를 적용하는 것이 어려웠기 때문에 C번임에도 *2300을 받은 비운의 문제.

 

→ solved.ac tag: pigeonhole_principle

'Algorithm > D. Math & Number Theory' 카테고리의 다른 글

52. Chinese Remainder Theorem  (0) 2021.06.03
51. Extended Euclidean Algorithm  (0) 2021.06.03
49. Sieve of Eratosthenes  (0) 2021.05.30
48. Prime Factorization  (0) 2021.05.29
47. Probability  (0) 2021.05.16