Koala - 2기

www.acmicpc.net/problem/2776 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net 수첩1, 수첩2에 적힌 수를 각각 입력받아 수첩2의 번호가 수첩1에 있었는지(0, 1) 출력하는 문제였습니다. 처음에 해시를 사용하여 풀었다가 시간초과가 나서 이분탐색을 사용하여 풀었습니다. 이분탐색에서도 시간초과가 났었는데, cstdio를 사용하니 해결되었습니다! 정렬 left = 0, right = N-1 mid = (left+right)/2 mid가 가리키는 값이면 return mid가 가리키는 값보다 클 때 ..
※docs.microsoft.com/ko-kr/cpp/standard-library/set?view=msvc-160docs.microsoft.com/ko-kr/cpp/standard-library/unordered-set?view=msvc-160 에서 더욱 자세히 살펴보실 수 있습니다. 해시를 매우면서 살펴본 map은 다음과 같은 강점이 있었습니다. 해시는 요소를 저장할 때 키값을 중점으로 레드-블랙 트리로 저장하기 때문에, 레드블랙 트리의 특징을 그대로 가져갑니다. 하지만 정렬과 연산을 매우 많이 해야 할 때는 O(nlogn)의 시간 자체가 부담스러울 수 있습니다. 그래서 우리는 unordered_set을 사용합니다. 이 클래스는 요소를 정렬하여 저장하지 않습니다. 또, 그 자체를 해시로 저장합니다. ..
youtu.be/lZblLMwETLE youtu.be/j6ikG2UsALg youtu.be/Wbhwlf4stfY
www.acmicpc.net/problem/17479 17479번: 정식당 일반메뉴는 noodle 2개로 20,000원, 특별메뉴는 cutlet 2개와 friedrice 1개로 32,000원, 둘이 합쳐 52,000원으로 서비스메뉴 하나를 주문할 수 있다. www.acmicpc.net 문제 설명의 양이 상당하지만 로직은 복잡하지 않았던 문제였습니다. 음식 A와 B는 이름(string)과 가격(long long)을 저장하기 위해서 map으로 선언했고 디저트 C는 이름(string)만 존재하기 때문에 set으로 선언했습니다. 문제에서 주어지는 대로 A, B, C의 입력을 처리한 다음에 고객의 주문표가 입력되는데 이 주문표가 문제에서 제시된 음식 주문법에 부합하는지를 판별하는 코드를 작성해야 합니다. 특별메뉴..
www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 풀이 더보기 대칭 차집합의 성질을 이용하여 문제를 해결할 수 있습니다. * (대칭 차집합) = (A-B) U (B-A) 결론적으로 대칭 차집합이란 두 개의 집합을 두고 보았을 때, 서로 겹치는 원소를 제외한 나머지가 됩니다. 이러한 대칭 차집합의 정의와 map 자료구조의 중복된 원소는 저장하지 않는 성질을 이용하여 문제를 풀었습니다. 1. a+b만큼 for문을 순회하며 원소를 입력받고, 2. mp(map)..
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..
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 ..
KauKoala
'Koala - 2기' 카테고리의 글 목록 (4 Page)