본문 바로가기

전체 글32

BOJ 13548 : 수열과 쿼리 6 문제 링크 : https://www.acmicpc.net/problem/13548사전 지식 / 관련 알고리즘 : Mo's Algorithm* Mo's Algorithm 을 모르신다면, 위 링크를 먼저 접속하시는 것을 추천 드립니다. Mo's Algorithm 문제.BOJ 2912 백설공주와 난쟁이 문제와 요구사항이 거의 비슷하다.주어진 구간 [i, j] 에서의 최빈값의 등장 횟수를 찾는 문제다. BOJ 2912 백설공주와 난쟁이 풀이에서와 똑같이, ncnt 배열과 ccnt 배열을 정의하여 풀 수 있다.자세한 내용 및 코드는 BOJ 2912 백설공주와 난쟁이 풀이에서 설명해 놓았다. #include using namespace std;int ncnt[100010]; /// 각 수가 몇 번 등장?int .. 2025. 5. 24.
BOJ 2912 : 백설공주와 난쟁이 문제 링크 : https://www.acmicpc.net/problem/2912사전 지식 / 관련 알고리즘 : Mo's Algorithm * Mo's Algorithm 을 모르신다면, 위 링크를 먼저 접속하시는 것을 추천 드립니다. 또 하나의 전형적인 Mo's Algorithm 문제다.마찬가지로, 정렬 후 첫 쿼리는 수동으로 구한다. ncnt[i] : i 번 색 모자를 쓰고 있는 난쟁이의 수ex) ncnt[3] = 5 는, 3번 색 모자를 5명의 난쟁이가 쓰고 있다는 것입니다. ccnt[i] : ncnt[k]=i 를 만족하는 k 의 개수ex) ccnt[4] = 3 은, 그 색깔의 모자를 쓰고 있는 난쟁이가 정확히 4명인 색깔이, 정확히 3종류 있다는 것입니다. ncnt 와 ccnt 를 통해, 현재 가.. 2025. 5. 24.
BOJ 13547 : 수열과 쿼리 5 문제 링크 : https://www.acmicpc.net/problem/13547사전 지식 / 관련 알고리즘 : Mo's Algorithm* Mo's Algorithm 을 모르신다면, 위 링크를 먼저 접속하시는 것을 추천 드립니다. 전형적인 Mo's Algorithm 문제.쿼리를 정렬한 후, 변화량만 계산하면 된다. cnt[i] : i 의 개수로 정의하자.어떤 수 x 를 제거하면 cnt[x]-- 를, 추가하면 cnt[x]++ 를 하면 된다. cnt[x] : 1 → 0 이 되었다면, x 가 완전히 사라진 것이므로, 가짓수를 1 줄인다.cnt[x] : 0 → 1 이 되었다면, x 가 새롭게 하나 생긴 것이므로, 가짓수를 1 늘인다. 처음에 쿼리를 정렬하여 입력 순서를 뒤섞어 놨으니, 출력하기 전에 이를 복.. 2025. 5. 23.
BOJ 1214 : 쿨한 물건 구매 문제 링크 : https://www.acmicpc.net/problem/1214사전 지식 / 관련 알고리즘 : 수학 Pa + Qb ≥ D 가 되어야 한다.가장 먼저 드는 생각은, P 의 개수 a 를 0, 1, 2, ... 로 늘려가면서, 그에 맞는 b 의 최솟값을 찾는 것이다. P의 개수 a 가 결정된다면, Qb ≥ D - Pa 이고, 이를 만족하는 자연수 b 의 최솟값은 ⌈ (D-Pa) / Q ⌉ 이다.이를 깔끔하게 구하는 법은, 분자에 Q-1 을 더하고 나누는 것이다.즉, ⌈ (D-Pa) / Q ⌉ 는 ceil 함수 없이 (D-Pa+Q-1) / Q 로 구할 수 있다. 하지만, 이러면 시간 초과가 날 수 있다.만약 D = 10억, P = 2 라면,a 의 범위는 0, 1, 2, ... 5억 까지도 가능하.. 2025. 5. 23.
BOJ 1126 : 같은 탑 문제 링크 : https://www.acmicpc.net/problem/1126사전 지식 / 관련 알고리즘 : 다이나믹 프로그래밍 (DP) 처음 이 문제를 접했을 때, 며칠 동안 시간이 나는 대로 조금씩 고민했었는데, 결국 풀어냈을 때 매우 짜릿했다.DP 의 정의를 떠올리는 관찰이 어렵지, 그 후 점화식을 세우는 것과 코딩을 하는 것 모두 쉽다. DP 의 상태로 가능한 변수들에는 어떤 것들이 있을까? 대부분의 DP 문제들이 그렇듯,조각이 1개 있을 때, 2개 있을 때, 3개 있을 때, ..., N개 있을 때 즉, 우리가 현재 "고려하고 있는 조각의 개수"를 x 로 두자.ex) x = 5 라는 것은, 1번 ~ 5번 조각까지만 고려한다는 것이다. 5번 조각을 반드시 쓸 필요는 없다. 우리의 목표는 두 탑의.. 2025. 5. 23.
BOJ 8872 : 빌라봉 문제 링크 : https://www.acmicpc.net/problem/8872문제를 요약하자면, 여러 개의 독립된 트리들이 주어진 포레스트가 주어진다.이 때, 각 트리들 사이에 간선을 추가하여 완성된 전체 트리의 지름을 최소화시켜야 한다.트리의 지름과 반지름, 중심에 대한 이해가 있다면 쉽게 풀 수 있다.우선, 예제의 그림을 통해 관찰해보자.새로운 간선을 0 번 노드에 연결하면, 최대 거리가 4 + 4 + 2 = 10 이 된다.만약 새로운 간선을 다른 곳에 연결한다면, 최대 거리가 더 작아지지 않을까?아래 그림을 보자.8번 노드(또는 2번 노드) 를 선택하면 최대 거리가 6 이다. 더 효율적인 것이다.따라서, 우리는 각 트리 내에서 같은 트리 내의 정점 간의 최대 거리가 최소인 노드를 찾아야 한다.예제.. 2022. 9. 13.