본문 바로가기

알고리즘 (2020 : 08 : 10 ~ )/다이나믹 프로그래밍

(43)
[백준 / BOJ] 11660 구간 합 구하기 5 문제 출처 : www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net N과 M이 주어지고, N*N그리드에 숫자들이 주어진다. M개의 범위가 주어졌을때, 해당 범위에있는 숫자들의 합을 구하는문제다. 예를들어, 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 그리드에서, 1 1 1 4 는 10이다. 풀이 (구간합 구하기 3을 풀다 도망쳤다...) 일반적인 완전탐색으로는 풀지못한다. N의 범위가 1024이고, M이 10..
[백준 / BOJ] 12785 토쟁이의 등굣길 문제 출처 : www.acmicpc.net/problem/12785 12785번: 토쟁이의 등굣길 인하대학교에 다니는 토쟁이는 y축과 평행한 w개의 도로, x축과 평행한 h개의 도로가 있는 도시에 살고 있다. 토쟁이의 집은 이 도시의 맨 왼쪽 아래에 위치하며 좌표로는 (1, 1)로 표시할 수 있다. www.acmicpc.net w*h그리드가 주어지고, 토스트집의 위치 y,x가 주어진다. 인하대학교에 다니는 토쟁이가 토스트집(x,y)을 지나서 (w,h)에 위치한 학교에 갈려할때, 최소 이동횟수를 구하는 문제다. 풀이 모든 경우를 다 탐색할경우 한 골목에서 선택할수있는 선택지가 2개, 골목길의 수가 40000개 이므로, 2^40000번 반복해서 시간초과가 난다. dp를 써서 풀었다. dp[y][x] = 최소..
[백준 / BOJ] 2056 작업 문제 출처 : www.acmicpc.net/problem/2056 2056번: 작업 수행해야 할 작업 N개 (3 ≤ N ≤ 10000)가 있다. 각각의 작업마다 걸리는 시간(1 ≤ 시간 ≤ 100)이 정수로 주어진다. 몇몇 작업들 사이에는 선행 관계라는 게 있어서, 어떤 작업을 수행하기 위해 www.acmicpc.net N개의 수행할 작업과, 각 작업을 수행하는데 걸리는 시간이 주어진다. 작업에는 선행관계가 있고, 각 작업을 수행하기위해선, 해당 작업의 선행작업을 수행해야한다. 이때, 모든 작업을 수행하는데 걸리는 최소시간을 구하는 문제다. 풀이 재귀와 메모이제이션으로 풀리는문제다. 현재 작업 A를 수행해야하고 A의 선행 작업이 B,C,D라고 할때, B,C,D가 걸리는 수행시간중 최댓값을 가져와서 A가 ..
[백준 / BOJ] 1149 RGB거리 문제 출처 : www.acmicpc.net/problem/1149 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 집의수 N이 주어진다. 이때, 각 집은 빨강,초록,파랑으로 칠할수있고, 색깔은 연속되게 칠하지못한다. 각 색깔로 칠하기위해 드는 비용이 주어졌을때 최솟값을 구하는 문제다. 풀이 N이 최대 1000이고, 시간제한이 0.5라서 완탐으로 풀경우 시간초과가 난다. Dp를 이용하면 풀리는 문제였다. 각 색깔을 연속으로 칠할수없다는 조건이있다. 즉, 현재 색 R, G, B를 칠하기 위해..
[백준 / BOJ] 1516 게임 개발 문제 출처 : www.acmicpc.net/problem/1516 1516번: 게임 개발 첫째 줄에 건물의 종류 수 N(1 ≤ N ≤ 500)이 주어진다. 다음 N개의 줄에는 각 건물을 짓는데 걸리는 시간과 그 건물을 짓기 위해 먼저 지어져야 하는 건물들의 번호가 주어진다. 건물의 번호는 1부 www.acmicpc.net N개의 건물이 주어지고, 각 건물을 짓는 시간과 그 건물을 짓기위해 먼저 지어야할 건물들이 주어진다. 이때 각 건물을 짓기 위해 필요한 최소 시간을 구하는 문제다. (각 건물은 동시에 지을수있다.) 풀이 N의 최댓값이 500이라 완전탐색을 하게되면, 최악의경우 501^2*250 만큼 돌아서 시간초과가 난다. DP로 풀리는 문제였다. 각 건물을 짓기위해 지어야할 선행건물들을 모두 지었다면..
[백준 / BOJ] 1082 방 번호 문제 출처 : www.acmicpc.net/problem/1082 1082번: 방 번호 문방구에서 파는 숫자의 개수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 문방구에서 파는 숫자는 0보다 크거나 같고, N-1보다 작거나 같은 자연수이다. 예를 들어, N=4이면, 문방구에서 파 www.acmicpc.net 갖고있는돈이 주어지고, 각 숫자들의 가격이주어진다 (0~9번까지숫자들의 가격) 이때, 숫자들을 조합해서만들수있는 최댓값을 찾는 문제다. 예를들어, 예제 1의경우, 순서대로 숫자 2를 8원에사고 숫자 1을 7원에 , 숫자 0을 6원에사면, 총 21원으로 210이 만들어지고 이때 최댓값을 갖는다. 풀이 완전탐색으로 풀경우, 최악의 경우, 총 10개의 글자가 중복을 허용해서 50개의 자리에 올수..
[백준 / BOJ] 1005 ACM Craft 문제 출처 : www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N 과 건물간의 건설순서규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 내가 원하는 건물을 건설할때 걸리는 최소 시간을 출력하는 문제다. 풀이 완전탐색으로 풀경우 N 3 이렇게 저장이 될건데, 4번건물을 짓기위해선 4번에 연결된 건물들을 모두 지어야한다(2번과 3번)라는 뜻 2. 끝까지 탐색하며 건물을 지을때마다 check배열을 업데이트 해준다. (바텀업으로 구현함) check배열을 업데이트할때, 전 위치의 건물들중 최댓값을 뽑아서 업데이트 해줘야함 이때 이미 ..
[백준 / BOJ] 10164 격자상의 경로 문제 출처 : www.acmicpc.net/problem/10164 10164번: 격자상의 경로 입력의 첫째 줄에는 격자의 행의 수와 열의 수를 나타내는 두 정수 N과 M(1 ≤ N, M ≤ 15), 그리고 ○로 표시된 칸의 번호를 나타내는 정수 K(K=0 또는 1 < K < N×M)가 차례로 주어지며, 각 값은 공백으 www.acmicpc.net N*M 그리드에서 무조건 (1,1) 에서 시작하여 (Y,X)지점을 지나 (N,M)지점에 최소한의 이동으로 도달하는 경로의 수를 구하는 문제다. 풀이 dp로 풀리는 문제였다. 전 지점에 최소로 도달하는 경로의 수를 알고있다면, 현재위치까지 오는 경로의 수를 알수있다. 예제처럼 3*5 그리드가 있다고 가정해보자 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0..