2021/03 6

[백준] 가장 큰 정사각형 1915번 (c++)

출처 : 1915번: 가장 큰 정사각형 (acmicpc.net) 1915번: 가장 큰 정사각형 첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다. www.acmicpc.net 풀이 방법 dp 문제이다 문제를 쪼개는 방법이 중요하다. 쪼갤 때 사각형의 가장 왼쪽 위 배열을 기준으로 그 정사각형의 한 변의 길이를 기록한다. 가장 큰 정사각형의 변의 길이를 제곱하여 넓이를 구한다. 0000 1111 1111 0000 예를 들어 위 경우에서 왼쪽 위 모서리의 배열에 길이를 저장이면 dp[1][0] = 2, dp[1][1] = 2.. 이렇게 되지만 dp[2][0] 은 1이 된다 변의 길이가 2인 정사각형에 포함은 되지만 그 정사각형에서 왼쪽 위의 점..

Algorithm 2021.03.31

[학교 과제] 프리랜서 (c++)

문제 고급 주택을 청소해주는 프리랜서가 있다. 최대한의 이익을 얻기 위해서 청소 스캐쥴을 짜야한다. 입력으로는 N이 주어지는데 N개의 청소할 수 있는 곳이 나온다 다음 N개의 줄에는 시작일, 마감일, 비용이 나오고 같은 비용일 때는 적은 일을 한 스캐줄이 선택 받는다. 주택을 옮기는데 비용이 들기 때문에 10만원이라는 지출이 발생한다. 일이 1일에서 3일까지 라면 3일 까지 일을 하는 것이기 때문에 3일에 일을 시작 할 순 없다. 해결 방법 dp 문제로 처음에는 일을 시작하는 날을 기준으로 cache의 인덱스를 정했지만 이러면 같은 날 시작하는 일이 2개 있을 경우 먼저 나온 일로 cache에 저장 되기 때문에 해결 할 수 없다. 그래서 일이 입력된 인덱스를 cache의 인덱스로 잡아 해결 하였다. 재귀..

Algorithm 2021.03.30

[학교 과제] 카드덱 (c++)

문제 1부터 N까지 정수가 쓰인 N장의 카드 중 1~2장의 카드가 빠졌다 빠진 카드를 찾아라 (단 공간 복잡도는 O(1)의 공간 복잡도를 가져야 한다.) 빠지지 않은 카드의 번호는 무작위로 섞여 하나씩 제공된다. 풀이 방법 만약 카드가 1장 빠졌다면 1부터 N까지의 합(n*(n+1)/2) 에서 제공되는 카드수를 더 한 값을 빼면 빠진 카드의 수를 알 수 있다. 2장인 경우에는 식이 하나 더 필요하다 1부터 N까지의 제곱의 합이 필요하다 (n*(n+1)*(2n+1)/6) 에서 제공되는 카드의 수를 제곱한 것을 빼면 빠진 두 카드의 제곱의 합을 구 할수있다. 여기서 두 수를 더한 수의 제곱에서 두 카드의 제곱의 합을 빼면 수두의 2*곱한 값 을 알 수 있다. 두 수를 더한 값을 A 두수를 곱한 값을 B라고 ..

Algorithm 2021.03.30

[백준] 퇴사 14501번 (C++)

출처 : 14501번: 퇴사 (acmicpc.net) 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 방법 일을 할지 안 할지 선택하면 되는 dp 문제이다 문제의 입력을 받은데로 인덱스가 시작일 이므로 문제는 간단하다 다음 날 일을 시작하면 p[day]+Money(day + t[day]) 그냥 넘기려면 Money(day+1)을 해주어서 둘 중 max를 선택하면 된다. #include #include #include using namespace std; const int MAX = 15 + 1; const int INF = 987654321; int N; int cache[MAX]; int t[MAX]; int p[MAX]; int Money(..

Algorithm 2021.03.24