1. 순열
서로 다른 n개에서 r개를 택해 일렬로 나열하는 것
문제
https://www.acmicpc.net/problem/15649
visit[]
배열 사용 : 중복되어 저장되는지를 체크한다. 0 <= i < n
: 비내림차순 정렬 Xif(!visit[i])
일 때 arr[depth]
에 값을 저장if (depth == r)
이 되면 arr
의 값을 문제의 조건에 맞게 처리하고 return
한다.2. 중복 순열
서로 다른 n개에서 중복을 허락하여 r개를 택해 일렬로 나열하는 것
문제
https://www.acmicpc.net/problem/15651
visit[]
배열 사용 Xif(!visit[i])
확인 X 0 <= i < n
arr[depth]
에 값을 저장if (depth == r)
이 되면 arr
의 값을 문제의 조건에 맞게 처리하고 return
한다.3. 같은 것이 있는 순열
경우의 수
n개 중에 같은 것이 각각 p개, q개, ... , r개씩 있을 때 이들을 모두 일렬로 나열하는 순열의 수는
n! / (p! * q! * r!) (단, p+q+...+r = n)
문제
https://www.acmicpc.net/problem/15663
풀이법
4. 같은 것이 있는 중복 순열
문제
https://www.acmicpc.net/problem/15665
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
풀이법
before
변수 사용before
)과 같은지를 체크한다.arr[depth]
에 현재 노드의 값을 저장한다. HashSet
을 이용해볼까?0 <= i < n
if (depth == r)
이 되면 arr
의 값을 문제의 조건에 맞게 처리하고 return
한다.1. 조합
서로 다른 n개에서 r개를 택하는 것
2. 중복 조합
서로 다른 n개에서 중복을 허락하여 r개를 택하는 것
경우의 수
문제
https://www.acmicpc.net/problem/15652
풀이법
3. 같은 것이 있는 조합
문제
https://www.acmicpc.net/problem/15664
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
풀이법
4. 같은 것이 있는 중복 조합
문제
https://www.acmicpc.net/problem/15666
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
풀이법
before
변수 사용arr[depth]
에 현재 노드의 값을 저장한다. cnt <= i < n
if (depth == r)
이 되면 arr
의 값을 문제의 조건에 맞게 처리하고 return
한다.유형이 많아서 시간을 들여서 정리를 해보았다. 헷갈리지 않게 틈틈이 복습하자!