www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 알파벳 대문자로 이루어진 단어에서 각 알파벳 대문자를 0부터 9까지의 숫자 중 하나로 바꿔서 N개의 수를 합하는 문제. 0 ~ 9까지의 숫자는 10개이므로 백트래킹을 통해 풀 수 있습니다. 각 알파벳에 대응되는 숫자의 조합들을 백트래킹을 통해 구하고 각 알파벳을 숫자로 치환 후 계산하여 답을 구하면 됩니다. #include #include #include using namespace std; #define..
전체 글
항공대 알고리즘 동아리 Koala 🥰www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000..
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 ..
www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000..
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net N보다 작은 소수를 시간제한 내에 빠르게 구하는 방법이 중요했던 투포인터 문제입니다. [N 보다 작은 소수를 구하는 방법] 1부터 N사이의 수 각각이 자기 자신과 1 외의 다른 수와 나눠 떨어지지 않아야 소수의 정의를 만족합니다. 모든 수에 대해서 직접 확인을 하는 방식은 (N ≤ 4,000,000) 이라는 조건을 고려하면 적절한 방식이 아닙니다.(시간초과) 따라서 해당 문제에서 에라토스테네스의 체를 이용해서 소수를 구했습니다. for (int i = 2; i
www.acmicpc.net/problem/1806 투포인터를 이용해서 시간제한 안에 알고리즘을 작동시키는 것이 포인트입니다. 주어진 입력 N은 100,000 보다 작은 수 입니다. 모든 수열을 확인하는 방식은 O(N^2) 의 시간복잡도를 가지게 되는데 이는 문제의 시간제한 0.5초 안에 작동이 불가능합니다. 따라서 투포인터를 이용해서 시간 복잡도를 O(N)으로 구현했습니다. 우선 주어지는 N과 S 값, N개의 배열 원소를 입력 받습니다. int n, s; cin >> n >> s; for (int i = 0; i > arr[i]; } 이제 투포인터를 사용한 부분을 보겠습니다. int left = 0; int right = 0; int sum = arr[left]; int ..
www.acmicpc.net/problem/1644 1644번: 소수의 연속합 첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 4,000,000) www.acmicpc.net 문제를 해결하기 위해 할 일 첫 번째. 소수 구하기 소수를 구하기 위해 에라토스테네스의 체 사용 자신의 배수를 미리 제거하여 연산의 횟수를 줄인다. memset(arr, true, sizeof(arr)); arr[1] = false; for (int i = 1; i 소수의 합에서 소수 배열의 start 번째 값을 뺀다. ii) 소수의 합 소수의 합에서 소수 배열의 end 번째 값을 더한다. 이때, 소수의 합과 N이 같으면 경우의 수를 하나 찾은 것으로 간주한다. int sum = 0; int start = 0; in..
www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net 이 문제는 DP, 다이나믹 프로그래밍을 설명할 때 A반에서 출제했던 문제입니다. 이 문제를 처음 보면 어렵게 느껴질 수 있지만 그림을 그려서 따라가다 보면 쉽게 해결 할 수 있는 문제입니다. 풀이 1. 왼쪽 전봇대를 기준으로 오름차순으로 정렬을 시킵니다. 2. 오른쪽 전봇대에서 "가장 긴 증가하는 부분 수열"을 구해줍니다. 3. 2번 과정에서 구한 "가장 긴 증가하는 부분 수열"의 크기를 N에서 빼주면 답이 됩니다. ..