목록조합론 (6)
기록방
👉 문제링크 1010번: 다리 놓기 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다. www.acmicpc.net 🔸 문제 분석 🔸 N개의 서쪽 지점에서 M개의 오른쪽 지점으로 다리를 연결 하는 경우의 수를 구한다. 다리는 서로 겹칠 수 없다. 한 지점은 하나의 다리만 놓일 수 있다. 조합으로 접근할 수 있다. N
👉 문제링크 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 🔸 문제 분석 🔸 순열의 수 n과 순열이 입력된다. 순열을 사전 순으로 정렬했을 때, 입력 된 순서의 다음 순서인 순열을 출력한다. n이 1만까지 입력되므로, 재귀 메소드를 이용해 사전순 정렬을 구현하면 시간초과가 난다. (1만 팩토리얼..?) 사전 순 정렬은 다시 말하면 순열에서 내림차순 정렬이다. 순열이 [1, 2, 3, 6, 5, 4]이라고 가정하면, 123654 다음으로 큰 수를 찾아야 한다. 654만 봤을때 해당 조합에서 가장 큰 수이다.(내림차순) 그 다음수를 찾으려면 내림차순이 아니게 되는 3을 바..
👉 문제링크 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net 🔸 문제 분석 🔸 nCm을 출력한다. n개의 수에서 m개를 선택하는 조합의 공식과 예시는 다음과 같다. n! / (n-r)!r! n=5, r=2 : 5*4*3/2*1 n이 팩토리얼로 아주 큰 값으로 커져 long의 범위를 벗어나므로 BigInteger를 사용해야한다. 🔸 코드 🔸 import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = s..
👉 문제링크 17358번: 복불복으로 지구 멸망 (2,1,4,3), (3,4,1,2), (4,3,2,1) 총 3가지 경우가 가능하다. www.acmicpc.net 🔸 문제 분석 🔸 n개의 컵이 오름차순으로 배치되어 있는데, 한 번씩 바꿀때 가능한 경우의 수를 출력한다. 4개의 컵을 바꾸는 경우의 수는 다음과 같다. 먼저 1개를 골라놓고, 바꿀 수 있는 경우의 수 : 3 남은 2개에서 1개를 골라놓고, 바꿀 수 있는 경우의 수 : 1 3*1 = 3가지이다. 6개의 컵을 바꾸는 경우의 수 1개 고르고, 바꿀 수 있는 경우의 수 : 5 남은 4개에서 1개 골라놓고, 바꿀 수 있는 경우의 수 : 3 남은 2개에서 1개 골라놓고, 바꿀 수 있는 경우의 수 : 1 5*3*1 = 15가지이다. 경우의 수를 곱하다 보..
👉 문제링크 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 🔸 문제 분석 🔸 옷 이름과 종류를 입력받고, 입을 수 있는 의상 조합의 수를 구한다. 🔸 코드 🔸 for _ in range(int(input())): n = int(input()) weardict = {} for _ in range(n): wear = list(input().split()) if wear[1] in weardict: weardict[wea..