본문 바로가기

알고리즘98

백준 g5 1759 암호 만들기 c++ https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 풀이 moCnt와 jaCnt로 각각 모음과 자음 개수를 세 준 뒤에, 조건에 맞으면 출력하고 그렇지 않으면 그냥 return하면 된다 소스 코드 /*boj g5 1759 암호 만들기*/ #include #include #define MAXN 20 using namespace std; int L, C; char ans[MAXN]; char arr[MAXN]; int moCnt = 0; int jaCnt .. 2024. 1. 16.
백준 15665 N과 M (11) c++ https://www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 /*boj s2 15665 N과 M (11)*/ #include #include #define MAXN 105 using namespace std; int N, M; int arr[MAXN]; int ans[MAXN]; void func(int k) { if (k == M) { for (int m = 0; m M; for (int i = 0; i < N;.. 2024. 1. 15.
백준 s2 15663 N과 M (9), s2 15664 N과 M(10) c++ https://www.acmicpc.net/problem/15663 풀이 다른 N과 M 문제들과 다르게, 중복되는 수가 수열로 주어질 수 있다. ex) 9 7 1 9 이런 경우에는 1 7 9 9와 9는 같은 수열이므로 한 번만 출력되어야 하고, 1 7 ... 9 9 대신 9와 9가 같이 선택되면 99 수열을 이룰 수 있다. 이를 해결하기 위해서는 같은 자리에 같은 숫자가 들어가는 경우를 방지하면 된다. 예를 들어 1 _ 에서 빈 자리에 9가 한 번 들어가고, 그 다음에 9가 또 들어가는 건 똑같은 수열이므로 안 된다. 그러나 _ _ 에서 첫 번째 자리에 9가 들어가고, 두번째 자리에 9가 들어가는 것은 괜찮다. 서로 다른 자리에 똑같은 수가 들어가는 것은 괜찮다. 이 예외처리를 위해 for문으로 숫자를 .. 2024. 1. 15.
백준 s3 15654 N과 M (5) c++ https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net /*boj s3 15654 N과 M (5)*/ #include #include #define MAXN 10 using namespace std; int N, M; int arr[MAXN]; int answer[MAXN]; bool isused[MAXN]; void func(int k) { // [k]에 넣을 차례, if (k == M) { for (int i = 0; i < M; i++).. 2024. 1. 15.
백준 s3 15652 N과 M (4) c++ https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 비내림차순이므로 (중복 가능), 다음 원소를 고를 때 마지막으로 택한 원소 이상을 고르도록 하면 된다. 코드 /*boj s3 15652 N과 M (4)*/ #include #define MAXN 9 using namespace std; int N, M; int answer[MAXN]; void func(int k, int j) { // j부터 가능 if (k == M) { for (int .. 2024. 1. 15.
백준 s3 15651 N과 M (3) c++ https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 /*boj s3 15651 N과 M (3)*/ #include #define MAXN 9 using namespace std; int N, M; int answer[MAXN]; void func(int k) { if (k == M) { for (int i = 0; i < M; i++) { cout M; func(0); } 2024. 1. 15.
백준 s3 15650 N과 M (2) c++ https://acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 - 재귀로 푼 버전 /*boj s3 15650 N과 M (2)*/ #include #define MAXN 9 using namespace std; int N, M; int answer[MAXN]; void func(int k, int i) { // i부터 시작 if (k == M) { for (int i = 0; i < M; i++) { cout M; func(0, 1); } 코드 - next_p.. 2024. 1. 15.
백준 s2 1182 부분수열의 합 c++ https://www.acmicpc.net/problem/1182 풀이 1. 1+3+2나 1+2+3이나 동일하므로, 중복되지 않도록 하였다. 2. S=3 일 때, 1+2로 S 조건을 충족해도 1+2+(-2)+(-1) 이나 0을 더하는 등 조건을 만족하는 부분수열이 더 있을 수도 있기 때문에 return으로 끝내지 않고 더 가야 한다 3. S=0 일 때, func(0)에서 맨 처음 시작이 0이기 때문에 최종 answer에서 -1 해줘야 한다. 수도 코드 func (int i) { //i번째 인덱스부터 시작 if (sum == S) answer++; for(j: i+1 ~ N-1) sum += arr[j] func(j+1) sum -= arr[j] } 코드 /*boj s2 1182 부분수열의 합*/ #inc.. 2024. 1. 15.
백준 g4 9663 N-Queen c++ https://www.acmicpc.net/problem/9663 수도 코드 func (int i) { // i번째 행에 퀸을 둘 차례 (i: 0 ~ N-1) if (i == M) answer++; return; for(j: 0 ~ N-1) { if (열, 우상향 대각선, 좌상향 대각선에 없을 때) isused 표시 func(i+1( isused 표시했던 거 되돌리기 } } 코드 /*boj g4 9663 N-Queen*/ #include #define MAXN 16 using namespace std; int N; bool isused1[MAXN]; bool isused2[2 * MAXN]; bool isused3[2 * MAXN]; int answer; void func(int i) { // i번째 행.. 2024. 1. 15.