본문 바로가기

전체 글

(349)
백준 17420 - 깊콘이 넘쳐흘러 www.acmicpc.net/problem/17420 개인적으로 이 문제는 지문이 난해하다고 생각한다. 지문을 정리하면 사용 기한이 $A_i$일 남은 기프티콘을 $B_i$일 후에 쓸 계획인데 기프티콘을 한번 연장하면 30일 연장이 된다. 기프티콘을 쓸 때는 사용 기한이 제일 촉박한 기프티콘을 먼저 사용한다. 기한이 가장 적게 남은 기프티콘이 여러개면 아무거나 사용할 수 있으며 하루에 여러 기프티콘을 쓰거나 연장할 수 있다. 기프티콘을 모두 사용하는 최소 연장 횟수를 구하라. 문제를 푸는데 핵심인 부분은 입력에 써있는 설명과 '기프티콘을 쓸 때는 사용 기한이 제일 촉박한 기프티콘을 먼저 사용한다. 기한이 가장 적게 남은 기프티콘이 여러개면 아무거나 사용할 수 있으며 하루에 여러 기프티콘을 쓰거나 연장할 수..
백준 1082 - 방 번호 www.acmicpc.net/problem/1082 가지고 있는 돈으로 만들 수 있는 가장 큰 수를 출력해야 한다. 0을 제외하고 0으로 시작하는 수가 없다고 한다. 이 문제는 양의 정수와 관련하여 다음과 같은 성질을 생각할 수 있다. 1. 자릿수가 많을수록 큰 수이다. 2. 어떤 두 수를 비교할 때 자릿수가 같다면 가장 앞에 자리가 큰 수가 더 크다. 이 두 성질을 통해 이 문제의 최적해를 구하기 위해서는 첫번째 숫자가 0이 되서는 안된다는 규칙을 지키면서 자릿수를 가능한한 크게 늘려야 하고, 자릿수를 늘릴 수 없다면 그 상태에서 수를 가장 크게 만들어야 한다. 이는 가장 싼 가격의 숫자를 최대한 많이 사서 자릿수를 늘리고 (첫번째 숫자는 0이 될 수 없다는 규칙을 지키면서) 자릿수를 최대한 늘리고 남..
백준 14400 - 편의점 2 www.acmicpc.net/problem/14400 새로 세우려는 편의점과 모든 주요 고객들의 맨하탄 거리가 최소가 되는 값을 찾아야 한다. 일직선 그래프의 경우에 대해 먼저 생각해보자. 일직선 그래프에서 모든 정점들과의 거리가 최소가 되는 좌표는 가운데에 위치한 점, 좌표들의 중앙값일 것이다. 이를 평면 그래프로 확장하면 X축에서 x좌표의 중앙값과 Y축에서 y좌표의 중앙값이 맨하탄 거리의 합을 최소로 하는 좌표가 된다. 정렬을 통해 각 축의 중앙값을 찾아 좌표를 만들고 해당 좌표와 고객들 사이 맨하탄 거리를 더해주면 답이 나온다. 전체코드 - 값이 int 범위를 넘어섬에 유의하자. #include using namespace std; using ll = long long; bool cmp(pair &..
백준 1915 - 가장 큰 정사각형 www.acmicpc.net/problem/1915 2차원 배열에서 가장 큰 정사각형을 찾는 문제이다. 이 문제는 현재 위치에 정사각형이 존재할 경우(값이 1일 경우) 왼쪽, 위쪽, 왼쪽 위에 있는 원소의 최솟값을 더해 현재 인덱스까지의 가장 큰 정사각형의 길이를 저장할 수 있다. 예제를 통해 알아보자. 인덱스 (0, 0)처럼 왼쪽, 위쪽, 왼쪽 위의 원소를 볼 수 없거나 그 값이 0인 경우는 넘어간다. 인덱스 (1, 1)에서 왼쪽, 위쪽, 왼쪽 위를 살펴보면 위쪽의 값은 1이지만 그 외 값들은 전부 0이다. 세 원소의 최솟값이 0이므로 해당 인덱스까지 계산했을 때 정사각형의 최대 길이는 역시 1 + 0 = 1이다. 마찬가지로 인덱스 (1, 2), (1, 3), (2, 1)까지 계산했을 때 최대 정사각형..
백준 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 + ..