알고리즘 연습/정수론 및 조합론 14

[🥉4 / 백준 15439 / 파이썬] 베라의 패션

15439번: 베라의 패션 베라는 상의 N 벌과 하의 N 벌이 있다. i 번째 상의와 i 번째 하의는 모두 색상 i를 가진다. N 개의 색상은 모두 서로 다르다. 상의와 하의가 서로 다른 색상인 조합은 총 몇 가지일까? www.acmicpc.net 문제 베라는 상의 N 벌과 하의 N 벌이 있다. i 번째 상의와 i 번째 하의는 모두 색상 i를 가진다. N 개의 색상은 모두 서로 다르다. 상의와 하의가 서로 다른 색상인 조합은 총 몇 가지일까? 입력 입력은 아래와 같이 주어진다. N 출력 상의와 하의가 서로 다른 색상인 조합의 가짓수를 출력한다. 제한 1 ≤ N ≤ 2017 N은 정수이다. 예제 입력 1 1 예제 출력 1 0 예제 입력 2 2 예제 출력 2 2 예제 입력 3 5 예제 출력 3 20 풀이 n..

[🥉4 / 백준 24723 / 파이썬] 녹색거탑

24723번: 녹색거탑 Naver D2를 아시나요? D2는 For Developers, By Developers의 약자로, 개발자들을 위해 개발자들이 직접 만들어 가고 있는 네이버 개발자 지원 프로그램입니다. 네이버가 축적한 기술과 지식을 공유하고, 외 www.acmicpc.net 문제 Naver D2를 아시나요? D2는 For Developers, By Developers의 약자로, 개발자들을 위해 개발자들이 직접 만들어 가고 있는 네이버 개발자 지원 프로그램입니다. 네이버가 축적한 기술과 지식을 공유하고, 외부 개발자들을 지원해 대한민국 개발자 역량 강화를 이끌고, 이를 통해 업계 전체와 네이버가 함께 성장하는 선순환 구조를 만들고자 합니다. 사실 네이버의 개발자 지원은 오랜 기간 꾸준히 이어져 왔습..

[🥇1 / 백준 1016 / 파이썬] 제곱 ㄴㄴ 수

1016번: 제곱 ㄴㄴ 수 어떤 수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min과 max를 포함한 사이에 제곱ㄴㄴ수가 몇 개 있는지 출력한다. www.acmicpc.net 문제 어떤 수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min과 max를 포함한 사이에 제곱ㄴㄴ수가 몇 개 있는지 출력한다. 입력 첫째 줄에 두 정수 min과 max가 주어진다. 출력 첫째 줄에 [min,max]구간에 제곱ㄴㄴ수가 몇 개인지 출력한다. 제한 1 ≤ min ≤ 1,000,000,000,000 min ≤ max ≤ min + 1,000,000 예제..

[🥈2 / 백준 2004 / 파이썬] 조합 0의 개수

2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net 문제 입력 첫째 줄에 정수 n, m (0≤m≤n≤2,000,000,000, n≠0)이 들어온다. 출력 첫째 줄에 (nm)의 끝자리 0의 개수를 출력한다. 예제 입력 25 12 예제 출력 2 풀이 직전 문제와 비슷하지만, 범위가 엄청 늘고 N! 대신 조합으로 바뀌었다. 이전 문제에선 범위가 작아 5씩 늘려가며 세어도 충분했다. 하지만 이번엔 2,000,000,000 이라는 어마어마한 숫자가 주어졌기 때문에 같은 방법으로 한다면 시간초과가 날 것이므로 규칙을 찾아야 한다. N! 을 소인수분해할 때 5가 한 개 이상 포함된 수..

[🥈4 / 백준 1676 / 파이썬] 팩토리얼 0의 개수

1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력 첫째 줄에 구한 0의 개수를 출력한다. 예제 입력 1 10 예제 출력 1 2 예제 입력 2 3 예제 출력 2 0 풀이 팩토리얼을 계산했을 때, 맨 뒷자리에 연속된 0이 몇 번 나오는지 세는 문제이다. 문제 설명에 소인수분해의 성질을 이용하라는 데에서 힌트를 얻었다. 보통 수의 끝자리에 0의 개수를 늘리기 위해서는 곱하기 10을 해주면 된다. 여기서 10은 2 * 5 꼴로 나타낼 수 있..

[🥈3 / 백준 9375 / 파이썬] 패션왕 신해빈

9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 문제 해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다. 예를 들어 오늘 해빈이가 안경, 코트, 상의, 신발을 입었다면, 다음날은 바지를 추가로 입거나 안경대신 렌즈를 착용하거나 해야한다. 해빈이가 가진 의상들이 주어졌을때 과연 해빈이는 알몸이 아닌 상태로 며칠동안 밖에 돌아다닐 수 있을까? 입력 첫째 줄에 테스트 케이스가 주어진다. 테스트..

[🥈5 / 백준 1010 / 파이썬] 다리 놓기

1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 문제 재원이는 한 도시의 시장이 되었다. 이 도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강이 흐르고 있다. 하지만 재원이는 다리가 없어서 시민들이 강을 건너는데 큰 불편을 겪고 있음을 알고 다리를 짓기로 결심하였다. 강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 재원이는 강 주변을 면밀히 조사해 본 결과 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M) 재원이는 서쪽의 사이트와 동쪽의 사이트..

[🥈1 / 백준 11051 / 파이썬] 이항 계수 2

11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 문제 자연수 N과 정수 K가 주어졌을 때 이항 계수 (NK)를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ K ≤ N) 출력 (NK)를 10,007로 나눈 나머지를 출력한다. 예제 입력 5 2 예제 출력 10 풀이 이번 문제에선 입력의 범위가 10에서 1000으로 늘어났다. 1000팩토리얼은 어마어마하게 큰 숫자이기 때문에 당연히 메모리초과가 일어날 것이다. 이항 계수의 식을 확인해 보자. n! 으로 나열될 숫자가 만약 분모에 존재한다면 약분이 가..

[🥉1 / 백준 11050 / 파이썬] 이항 계수 1

11050번: 이항 계수 1 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net 문제 자연수 N과 정수 K가 주어졌을 때 이항 계수 (NK)를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 0 ≤ K ≤ N) 출력 (NK)를 출력한다. 예제 입력 5 2 예제 출력 10 풀이 위와 같은 식을 코드로 작성하면 되는 문제이다. 팩토리얼을 재귀로 작성해도 좋지만, 굳이 for문 대신 사용할 필요는 없다. 성능을 감안하여 for문으로 작성해주자. n, k = map(int,input().split()) def factorial(num): result = 1 for i in range..

[🥈3 / 백준 3036 / 파이썬] 링

3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 문제 상근이는 창고에서 링 N개를 발견했다. 상근이는 각각의 링이 앞에 있는 링과 뒤에 있는 링과 접하도록 바닥에 내려놓았다. 상근이는 첫 번째 링을 돌리기 시작했고, 나머지 링도 같이 돌아간다는 사실을 발견했다. 나머지 링은 첫 번째 링 보다 빠르게 돌아가기도 했고, 느리게 돌아가기도 했다. 이렇게 링을 돌리다 보니 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 도는지 궁금해졌다. 링의 반지름이 주어진다. 이때, 첫 번째 링을 한 바퀴 돌리면, 나머지 링은 몇 바퀴 돌아가는지 구하는 프..

반응형