본문 바로가기

BOJ

[BOJ][Python] 백준 23057번 - 도전 숫자왕

728x90

문제 링크: https://www.acmicpc.net/problem/23057

 

23057번: 도전 숫자왕

모든 카드에 적힌 수의 합을 $M$이라고 할 때, 1 이상 $M$ 이하의 자연수 중 만들 수 없는 수의 개수를 출력한다.

www.acmicpc.net




문제 풀이

심심해서 BOJ 들어갔다가 대회가 20분 남짓 남아서 딱 3문제 풀었다. 이 문제는 그 3문제 중 하나.

각설하고, 조합을 이용하여 N개의 수 중 1~N개를 선택하여 조합을 만들어주고 합을 구한다.
이때, 합이 중복될 수도 있으므로 set()을 이용하여 중복값을 없애주었다.
또한 1부터 M까지 반복문을 돌리려고 하면 시간 초과가 날 것이다. M은 최대 2,000,000,000이기 때문이다.
따라서 M에서 set()에 있는 길이를 빼준다.
즉, M - (조합으로 구할 수 있는 수의 개수)를 구하면 O(1)에 가능하다.

코드

728x90