알고리즘(170)
-
[백준][C++] 23570번 Grid Triangle (math)
1. 문제 https://www.acmicpc.net/problem/23570 23570번: Grid Triangle Your program is to read from standard input. The input is exactly one line containing three integers, $A$, $B$, $C$ ($1 ≤ A, B, C ≤ 10,000,000$). www.acmicpc.net 2. 한 집합에서의 모든 경우의 수 - 삼각형의 세 좌표가 다음과 같을 때 - (0, 0, 0) , (x, y, z), (xx, yy, zz) - 차이들은 다음과 같다. p1 : x, y, z p2 : xx, yy, zz d : x - xx, y - yy, z - zz 문제에서 주어진 조건 - 숫자들의 ..
2021.11.16 -
[백준] [C++] 5419번 북서풍 (seg tree, sweeping)
1. 문제 https://www.acmicpc.net/problem/5419 5419번: 북서풍 각 테스트 케이스에 대해서, 북서풍을 타고 항해할 수 있는 섬의 쌍의 수를 출력한다. www.acmicpc.net 2. 풀이 - Y 는 감소해야하고 X 는 증가해야한다. - 이 때 생각할 수 있는 가장 간단한 방법은 - 한 축을 기준으로 정렬을 하고 한개씩 앞에서부터 다른 한축과 비교를 통해 가능한 쌍의 개수를 새나가는것이다. - 이경우 O(N^2) 의 시간복잡도로 75000 * 75000 = 5,625,000,000 - 최악의 경우 TLE 가 뜰것이다. 그러므로 O(NlogN) 로 문제를 해결해야한다. - 일단 x축을 기준으로 오름차순으로 정렬, y축은 내림차순으로 정렬해보자. - 그러면 대충 위와 같은 그..
2021.10.16 -
[codeforces] Codeforces Round #748 (Div. 3) A, C
1. A - 간단한 수학 문제 - 세개의 숫자중 가장큰것에서 +1 해주면된다 - 이때 가장 큰 수가 유일한 한 값이라면 0을 출력해주는 예외처리만 해주면된다. while (T--) { int maxC; int A[3]; cin >> A[0] >> A[1] >> A[2]; maxC = max(A[0], max(A[1], A[2])); map dic; for (int i = 0; i < 3; i++) { dic[A[i]]++; } int a[3]; for (int i = 0; i < 3; i++) { a[i] = maxC - A[i]; a[i]++; if (dic[maxC] == 1 && a[i] == 1) { a[i]--; } } cout4(a[0], " ", a[1], " "); cout2(a[2], "..
2021.10.14 -
[codeforces] Educational Codeforces Round 115 (Rated for Div. 2) A,B,C
https://codeforces.com/contest/1598 3솔 1. A - 그래프 문제 , 구현문제 - 상하좌우 , 대각선 4방향 총 8 방향으로 움직여 (0,0)에서 끝까지 도달할 수 있는지 판단하는 문제 - 이 문제는 그래프 탐색으로 해결가능하고 - 그냥 3번째 샘플데이터처럼 1이 상하로 연속적일 경우를 찾아 문제를 해결할 수 있다. 2. B - 구현문제, 포함 배제 - 학생들을 두그룹으로 나누는 문제 - 이 문제는 포함 배제의 원리를 응용하여 해결할 수 있다. - 5 일에서 2일 을 고르는 모든 경우의 수를 탐색하여 - A + B - AnB = 학생수 인 요일 두개를 찾아야한다. (단 이때 A와 B가 n/2 보다 크거나 같아야한다.) - AnB를 구하는것이 문제인데 이는 단순하게 아래와 같이..
2021.10.11 -
[atcoder] Exawizards Programming Contest 2021(AtCoder Beginner Contest 222)
3 솔 https://atcoder.jp/contests/abc222 Exawizards Programming Contest 2021(AtCoder Beginner Contest 222) - AtCoder AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp 1. A - 아주 간단한 문제 : "%04d".. #include #include using namespace std; int main() { string s; cin>>s; for(int i = 0; i < 4-s.size();i++) { coutb; vector c(a..
2021.10.10 -
[백준][C++] 20036번 Ball Alignment (dp)
1. 문제 https://www.acmicpc.net/problem/20036 -> - 중력에 의하여 공하나를 제거할 시 공들은 중간으로 모이게 된다. - 그리고 뺀 공은 맨 왼쪽이나 맨 오른쪽에만 넣을 수 있다. - 이때 공을 빼는 최소 횟수를 구해야한다. 2. 풀이 - 먼저 같은 공을 두번이상 손을 대지 않는다는것을 눈치채야한다. (첫번째 공을 뺀 행동의 의미가 없어짐, 그러므로 1번 공을 빼는것이 최소가 된다.) - 한 공마다 최대 1번만 공을 건들 수 있으므로 - 적절히 공을 제거해줘야하는데, - 중간에 삽입 불가능하므로 - 나머지 공들을 "정렬된 부분"으로 만드는 방향으로 제거해줘야한다. - 그러므로 이 문제는 주어진 배열에서 가장 긴 정렬된 부분 수열을 구하는 문제로 변형할 수 있다. 가장 간..
2021.10.07