본문 바로가기

분류 전체보기171

백준 13975 / C++ https://www.acmicpc.net/problem/13975 13975번: 파일 합치기 3 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데, www.acmicpc.net [ 풀이 ] 한번 합친 비용은 이후에 계속해서 더해진다. 즉, 처음에 작게 합칠수록 무조건 유리하다. 이제 작은것부터 2개씩 합쳐주면서 그걸 계속 더해나가면 된다. n제한이 1e6이므로 매번 작은걸 2개씩 골라주는건 우선순위큐로 찾아주면 O(logn)에 찾을 수 있다. 이제 구현만 해주면 된다. 최악의 경우 1e10이므로 long long을 써주자. [ 코드 ] #include using na.. 2022. 7. 21.
백준 12099 / C++ https://www.acmicpc.net/problem/12099 12099번: 점심메뉴 Q개의 줄에 줄마다 각 날의 영우와 승관이가 둘 다 좋아하는 메뉴의 수, 즉 u ≤ a ≤ v 이고, x ≤ b ≤ y 인 메뉴의 수를 출력한다 www.acmicpc.net [ 풀이 ] 매운맛, 단맛 수치가 [u,v], [x,y]에 포함되는 메뉴의 개수를 구하는 문제이다. 값이 10억이므로 빠르게 구간 인덱스 판단을 위해 이분탐색을 해야한다. 먼저 값을 매운맛 기준으로 정렬한 후, u보다 크거나 같은 최소 인덱스, v 초과 최소 인덱스를 찾는다. 그 인덱스사이를 순회하며 단맛 또는 [x,y]에 포함되는지 판단해주면 된다. [ 코드 ] #include using namespace std; int n, q, u, v,.. 2022. 7. 15.
백준 2805 / C++ https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 이분탐색(파라매트릭 서치) 입문문제이다. 설명은 코드로 대체. [ 코드 ] #include using namespace std; using ll = long long; ll n, m, h[1000001]; // 높이 x로 자른 나무들의 합이 m이상인지 판별하는 함수 int check(ll x) { ll sum = 0; for (int i = 0; i < n;.. 2022. 7. 15.
백준 16118 / C++ https://www.acmicpc.net/problem/16118 16118번: 달빛 여우 첫 줄에 나무 그루터기의 개수와 오솔길의 개수를 의미하는 정수 N, M(2 ≤ N ≤ 4,000, 1 ≤ M ≤ 100,000)이 주어진다. 두 번째 줄부터 M개의 줄에 걸쳐 각 줄에 세 개의 정수 a, b, d(1 ≤ a, b ≤ N, a ≠ b www.acmicpc.net [ 풀이 ] 여우는 v로 가고 늑대는 2v v/2 를 반복한다. 이 때 시간은 여우는 d/v , 늑대는 2d/v 또는 d/2v가 걸린다. 모두 정수로 맞춰주면, 시간은 여우가 2t 2t .... 늑대는 t / 4t / t / 4t .. 이렇게 걸린다. 여우의 경우 그냥 다익을 돌려주면 최단시간이 나온다. 늑대의 경우가 이 문제의 핵심이다. .. 2022. 7. 15.