본문 바로가기

알고리즘40

로또 - 6603 문제 : https://www.acmicpc.net/problem/6603 6603번: 로또 문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2 www.acmicpc.net 코드 : #include #include using namespace std; vector num; int s[12] = { 0 }.. 2019. 11. 25.
외판원 순회2 - 10971 문제 : https://www.acmicpc.net/problem/10971 10971번: 외판원 순회 2 첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j로 가기 위한 비용을 나타낸다. 항상 순회할 수 있는 경우만 입력으로 주어진다. www.acmicpc.net 소스 : #include #include #include using namespace std; int num[10][10] = { 0 }; int arr[10] = { 0 }; int main() { int n; cin >> n; //입력값 for (int i = 0.. 2019. 11. 23.
테트로미노 - 14500 문제 : https://www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누 www.acmicpc.net 소스 : #include using namespace std; int main() { int n, m; cin >> n >.. 2019. 11. 19.
모든 순열 - 10974 문제 : https://www.acmicpc.net/problem/10974 10974번: 모든 순열 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. www.acmicpc.net 소스 : #include #include using namespace std; int main() { int n; cin >> n; int num[8] = { 0 }; for (int i = 0; i < n; i++) { num[i] = i + 1; } do { for (int i = 0; i < n; i++) { cout 2019. 11. 19.
이전 순열 - 10973 문제 : https://www.acmicpc.net/problem/10973 10973번: 이전 순열 첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 소스 : #include #include using namespace std; int main() { int n; cin >> n; int num[10000] = { 0 }; for (int i = 0; i > num[i]; } bool check = prev_permutation(num, &num[n]); if (check) { for (int i = 0; i < n; i++) { cout 2019. 11. 19.
다음 순열 - 10972 문제 : https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 소스 : #include #include using namespace std; int main() { int n; cin >> n; int num[10000] = {0}; for (int i = 0; i > num[i]; } bool check = next_permutation(num, &num[n]); if (check) { for (int i = 0; i < n; i++) { cout 2019. 11. 19.
차이를 최대로 - 10819 문제 : https://www.acmicpc.net/problem/10819 10819번: 차이를 최대로 첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다. www.acmicpc.net 소스 : #include #include using namespace std; int main() { int n; cin >> n; int num[8] = { 0 }; for (int i = 0; i > num[i]; } sort(num, &num[n]); int value = -87654321; int sum = 0; do { sum = 0; for (int i = 0;.. 2019. 11. 19.
1, 2, 3 더하기 - 9095 문제 : https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력 각 www.acmicpc.net 소스 : #include using namespace std; int c; int arr[3] = { 1,2,3 };.. 2019. 11. 19.
일곱 난쟁이 - 2309 문제 : https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 소스 : #include #include using namespace std; /* 제외할 인덱스 2개를 선택 후 총합이 100이되도록 찾도록 구현 */ int main() { int num[9]; int value[7]; for (int i = 0; i > num[i]; } sort(num, &num[9]); int total = 0; int index = 0; b.. 2019. 11. 19.