본문 바로가기

이분 탐색

(18)
[C++] 17597번 Zipline https://www.acmicpc.net/problem/17597 25/01/12  간단한 기하학 문제다. 케이스를 나눠서 접근하면 쉽게 해결할 수 있다. 문제 접근 방식:  먼저 두 기둥을 잇는 케이블의 가장 짧은 길이는 두 기둥의 끝을 서로 이은 선분의 길이라는 사실은 쉽게 확인할 수 있다. 이제 케이블의 길이를 점점 늘린다고 해보자.문제에서 주어지는 그림이 케이블을 점점 늘린 상황이라고 가정해보자. 우리는 이 때의 경우에도 케이블 카가 지면으로부터 $r$만큼 위에 있어야 한다는 사실을 알고 있다. 근데 문제는 최저점을 찍었을 때의 상황이 언제인지를 모른다. 케이블 카가 $x$만큼 오른쪽으로 간 상황이라고 해보자. 그러면 케이블의 길이가 다음과 같다. $$l = \sqrt{(g-r)^2 + x^2}..
[C++] 2143번 두 배열의 합 https://www.acmicpc.net/problem/2143 25/01/11  이전에 북마크에 넣어두었다가 해결했던 문제다. 두 가지 해결 방법으로 해결할 수 있는데, 일단 나는 첫번째 해결 방법으로만 해결했고, 나머지 하나는 아이디어만 생각해두어서 적어보려고 한다. 문제 접근 방식:  부 배열의 합은 그냥 연속된 구간 합이다. 당연히 나이브하게 하면 시간초과가 날게 뻔하므로, 각각의 누적 합 배열을 $AA, BB$라고 하자. 이제 문제는 $T$가 주어질 때 $AA[i] - AA[j] + BB[p] - BB[q] = T$를 만족시키는 $i, j, p, q$를 구하는 경우의 수 문제로 바뀌게 되었다. 인덱스를 총 $4$개 뽑아야 되는데, 당연히 나이브하게 이걸 $4$개 뽑아서 조건을 만족시키는 것을 ..
[Python] 31531번 공들의 리듬게임 https://www.acmicpc.net/problem/31531 24/03/10  풀이 아이디어가 제법 알려져 있는 문제로, 이전에 비슷한 문제를 해결했다면 쉽게 해결 할 수 있는 애드혹 문제다.  문제 접근 방식:  이 문제의 아이디어는 아래 문제에서 얻을 수 있다.https://www.acmicpc.net/problem/4307또는 아래 문제에서도 얻을 수 있다.2023.09.02 - [알고리즘/백준 문제 풀이] - [Python] 13249번 공의 충돌 [Python] 13249번 공의 충돌https://www.acmicpc.net/problem/13249 13249번: 공의 충돌 무게가 모두 같고, 크기가 0인 공 N개가 일직선 위에 놓여져 있다. 오른쪽으로 굴러가는 공과 왼쪽으로 굴러가는 공..
[Python] 31532번 선형 회귀는 너무 쉬워 3 https://www.acmicpc.net/problem/31532 31532번: 선형 회귀는 너무 쉬워 3 첫 번째 줄에 $f_3(a)$의 값이 $0$에 가장 가깝게 하는 $a$, 즉, $a_3$을 출력한다. 답이 여러 가지라면 그중 아무거나 하나 출력한다. 가능한 정답 중 최소 하나 이상과의 절대오차 또는 상대오차가 $10 www.acmicpc.net 24/03/12 지난 겨울 MatKor Cup에 나왔던 문제로, 단순한 수치해석 문제입니다. 선형 회귀는 너무 쉬워 시리즈의 3번째 문제에 해당됩니다. 서브태스크 별로 문제 해설을 해보겠습니다. 문제 접근 방식: 서브태스크 1 ($b = 0;y_i = 0$) 모든 데이터(점)들의 $y$값 들이 $0$이고, 직선의 $y$절편이 $0$으로 주어져 있습니다...
[Python] 31235번 올라올라 https://www.acmicpc.net/problem/31235 31235번: 올라올라 길이가 $N$인 수열 $A$가 주어질 때, $N$ 이하의 양의 정수 $k$에 대하여 길이가 $N-k+1$인 수열 $B$를 다음과 같이 정의하자. $$B_{i}=\max_{i \le j \le i+k-1}A_j$$ 수열 $B$가 감소하지 않도록 하는 $k$의 최솟값 www.acmicpc.net 24/03/19 두 가지 방법으로 풀 수 있는 좋은 문제다. 그리디 + 스택으로도 풀 수 있고, 슬라이딩 윈도우+이분 탐색으로도 풀 수 있다. 개인적으로 전자가 더 쉽게 떠올릴 수 있다고 생각하지만 구현하는 데에 조금 실수가 생길 수 있고, 후자는 조금 더 어렵지만 구현하는 것이 그다지 어렵지 않아서, 어느 쪽으로 푸나 난이도..
[Python] 9024번 두 수의 합 https://www.acmicpc.net/problem/9024 9024번: 두 수의 합 프로그램은 표준입력으로 입력을 받는다. 프로그램 입력은 t 개의 테스트 케이스로 구성된다. 입력의 첫 번째 줄에 테스트 케이스의 개수를 나타내는 정수 t 가 주어진다. 두 번째 줄부터 두 줄 www.acmicpc.net 24/02/12 이전에 실패 했던 문제를 다시 풀어보았다. 전형적인 투 포인터 문제이지만, 포인터를 움직이는 방향에 유의해서 문제를 해결해야만 했었다. 문제 접근 방식: 특정한 값이 주어져 있고, 그 값에 가장 가까운 두 수의 합을 만들 수 있는 모든 조합을 찾는 것이 문제의 목표이다. 투 포인터 문제임을 보자마자 파악했지만, 포인터를 움직이는 방향에 유의해야만 했다. 나는 두 가지 경우로 분리해서..
[Python] 5526번 ダーツ (Darts) https://www.acmicpc.net/problem/5526 5526번: ダーツ (Darts) この例では,15 点の部分に 3 本,3 点の部分に 1 本の矢が刺さった場合にあなたの 得点は最大になり,その得点は 48 点である. www.acmicpc.net 23/12/29 중간에서 만나기(MITM) 연습 문제로 아주 적절한 문제이다. 첫번째 문제 접근 방식: 문제를 해석하자면 아래와 같다. 화살을 과녁을 향해 네 자루 던질 수 있다. 반드시 4개를 다 던질 필요는 없으며, 하나도 던지지 않아도 된다. 과녁은 $N$개의 부분으로 구분되어 있으며, 각 부분에는 점수 $P_1, P_2, \cdots , P_N$이 쓰여있다. 화살이 꽃힌 곳의 점수를 모두 합한 값 $S$가 기본 점수가 된다. 만약 $S$가 미리 정해..
[Python] 2295번 세 수의 합 https://www.acmicpc.net/problem/2295 2295번: 세 수의 합 우리가 x번째 수, y번째 수, z번째 수를 더해서 k번째 수를 만들었다라고 하자. 위의 예제에서 2+3+5=10의 경우는 x, y, z, k가 차례로 1, 2, 3, 4가 되며, 최적해의 경우는 2, 3, 4, 5가 된다. k번째 수가 최 www.acmicpc.net 23/12/28 중간에서 만나기(MITM)으로 안 풀어도 집합으로 쉽게 풀 수 있는 문제이다. 나는 중간에서 만나기 알고리즘 연습을 위해 그 방법으로 문제를 해결했다. 첫번째 문제 접근 방식: MITM으로 해결했다. 세 수의 합이 최대가 되도록 하려는 것이 우리의 목적이고, 그 세 수의 합 또한 기존 배열에 존재해야 한다. 나는 두 개로 분할했는데,..