프로그래밍/알고리즘

N+1개의 물건을 N개의 상자에 넣으면, 적어도 하나의 상자에는 두 개 이상의 물건이 들어간다. 오늘은 당연하면서도 다양한 곳에 적용할 수 있는 비둘기집 원리에 대해 알아보겠다. 증명 N+1개의 물건과 N개의 상자가 있을 때, 각 상자에는 한 개 이하의 물건만 들어가있다고 가정해보자. 각 상자에는 최대 1개의 물건이 있을 것이므로, 총 물건의 수는 많아야 N개이다. 그런데 N+1개의 물건이 있으므로, 이는 모순이다. 따라서 N+1개의 물건과 N개의 상자가 있을 때, 적어도 하나의 상자에는 두 개 이상의 물건이 들어간다. 귀류법을 이용해 쉽게 증명하였다. 귀류법이란 명제의 결론이 부정임을 가정했을 때 모순 발생함을 보여 명제가 참임을 증명하는 방법이다. 예시 한 반에 13명 이상의 학생이 있다면, 최소 2..
1보다 큰 자연수 N을 입력받았을 때, N 이하의 소수(Prime Number)를 모두 구하시오. 방법1: 하나씩 다 나눠보기 어떤 수가 소수인지 아닌지 판별하는 방법 소수(Prime Number)란 1과 자기 자신만 약수로 가지는 수로, 다시 말해 1과 자기 자신으로만 나누어 떨어지는 수이다. (단, 1은 소수가 아니다.) 그렇다면 특정 자연수 N이 소수인지 판별하려면 어떻게 해야 할까? 답은 어렵지 않다. 2부터 N-1까지의 숫자들로 나눠본 후, 나머지가 0인 경우가 하나라도 있으면 소수가 아닌 수이다. is_prime = True for i in range(2, N): if N % i == 0: is_prime = False break print("소수" if is_prime else "소수가 아님..
문제 1부터 N까지의 번호를 가진 N명의 사람이 있다. 각 사람들은 1부터 N 사이의 임의의 수 Ci가 쓰여있는 카드를 한 장씩 가지고 있다. 사람들 간에는 총 M쌍의 친구 관계가 있다. 모든 친구 관계는 양방향이라서, a번 사람과 b번 사람이 친구라면 b번 사람과 a번 사람도 친구이다. 서로 친구 관계에 있는 두 사람끼리는 서로 들고 있는 카드를 원하는 만큼 교환할 수 있다. 모든 사람들은 각자가 들고 있는 카드에 적힌 수가 자신의 번호와 최대한 비슷하기를 원한다. 어떤 한 사람의 불만족도를 그 사람이 들고 있는 카드에 적힌 수와 그 사람의 번호와의 차이로 정의하고, 전체 불만족도는 모든 사람의 불만족도의 합으로 정의한다. 카드 교환이 적절하게 이루어졌을 때, 가능한 전체 불만족도의 최솟값을 구하라. ..
잘익은 망고쥬스
'프로그래밍/알고리즘' 카테고리의 글 목록 (5 Page)