본문 바로가기

백준/그리디

(26)
백준 14247 - 나무 자르기 http://icpc.me/14247 날이 지나면서 가장 크게 자라는 나무를 가장 늦게 잘라야 최대한 많은 나무를 얻을 수 있다. 나무가 자라는 양을 기준으로 정렬 후 날짜별로 수확할 수 있는 나무의 양을 계산하면 된다. 전체코드 더보기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include using namespace std; using pii = pair; using ll = long long; ll res; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector tree(n); for (auto &x : tree) c..
백준 1285 - 동전 뒤집기 www.acmicpc.net/problem/1285 $N \times N$으로 놓여진 동전을 한행씩, 한열씩 뒤집을 수 있을 때 T의 갯수를 최소화 하는 문제이다. 이 문제는 $2^N$ 완전탐색을 통한 전처리 후 나머지를 그리디하게 결정하는 방법으로 풀 수 있다. 각 행을 뒤집는 경우를 완전탐색으로 결정한다고 해보자. 각 행에 대해 뒤집을지 말지 결정하는 경우의 수를 $2^N$의 시간 복잡도로 찾을 수 있다. 각 행에 대해 뒤집는 연산이 끝나면 각 열에 대해 뒤집었을 때와 뒤집지 않을 때의 T의 개수를 비교하여 T가 더 적은 쪽을 선택해나가는 방식으로 답을 구할 수 있다. 행이 아니라 열을 뒤집는 경우에 수에 대해 탐색하고 각 행을 뒤집을지 결정해도 상관없다. 총 시간복잡도는 $O(2^NN^2)$ 가 된..
백준 17420 - 깊콘이 넘쳐흘러 www.acmicpc.net/problem/17420 개인적으로 이 문제는 지문이 난해하다고 생각한다. 지문을 정리하면 사용 기한이 $A_i$일 남은 기프티콘을 $B_i$일 후에 쓸 계획인데 기프티콘을 한번 연장하면 30일 연장이 된다. 기프티콘을 쓸 때는 사용 기한이 제일 촉박한 기프티콘을 먼저 사용한다. 기한이 가장 적게 남은 기프티콘이 여러개면 아무거나 사용할 수 있으며 하루에 여러 기프티콘을 쓰거나 연장할 수 있다. 기프티콘을 모두 사용하는 최소 연장 횟수를 구하라. 문제를 푸는데 핵심인 부분은 입력에 써있는 설명과 '기프티콘을 쓸 때는 사용 기한이 제일 촉박한 기프티콘을 먼저 사용한다. 기한이 가장 적게 남은 기프티콘이 여러개면 아무거나 사용할 수 있으며 하루에 여러 기프티콘을 쓰거나 연장할 수..
백준 1082 - 방 번호 www.acmicpc.net/problem/1082 가지고 있는 돈으로 만들 수 있는 가장 큰 수를 출력해야 한다. 0을 제외하고 0으로 시작하는 수가 없다고 한다. 이 문제는 양의 정수와 관련하여 다음과 같은 성질을 생각할 수 있다. 1. 자릿수가 많을수록 큰 수이다. 2. 어떤 두 수를 비교할 때 자릿수가 같다면 가장 앞에 자리가 큰 수가 더 크다. 이 두 성질을 통해 이 문제의 최적해를 구하기 위해서는 첫번째 숫자가 0이 되서는 안된다는 규칙을 지키면서 자릿수를 가능한한 크게 늘려야 하고, 자릿수를 늘릴 수 없다면 그 상태에서 수를 가장 크게 만들어야 한다. 이는 가장 싼 가격의 숫자를 최대한 많이 사서 자릿수를 늘리고 (첫번째 숫자는 0이 될 수 없다는 규칙을 지키면서) 자릿수를 최대한 늘리고 남..
백준 1080 - 행렬 www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 한번 연산하면 3X3 부분행렬의 숫자가 0이면 1, 1이면 0으로 바뀐다고 할 때 필요한 연산의 최솟값을 구하는 문제이다. 3X3 부분행렬만 연산이 가능하므로 행렬의 전체 인덱스를 벗어나서 연산하는 일이 없도록 해야한다. 부분행렬 연산은 현재 인덱스 (i, j)에 대해 다음 범위로 계산한다고 하자. i, j i, j + 1 i, j + 2 i + 1, j i + 1, j + 1 i + 1, j + 2 i + 2, j i + ..