본문 바로가기

dp

(3)
[Algorithm] 백준 14501 퇴사 - node.js 이 글은 백준 14501번 퇴사를 풀이한다. 알고리즘은 javascript를 이용해 구현하였다. 문제 상담원으로 일하고 있는 백준이는 퇴사를 하려고 한다. 오늘부터 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 최대한 많은 상담을 하려고 한다. 백준이는 비서에게 최대한 많은 상담을 잡으라고 부탁을 했고, 비서는 하루에 하나씩 서로 다른 사람의 상담을 잡아놓았다. 각각의 상담은 상담을 완료하는데 걸리는 기간 Ti와 상담을 했을 때 받을 수 있는 금액 Pi로 이루어져 있다. N = 7인 경우에 다음과 같은 상담 일정표를 보자. 1일에 잡혀있는 상담은 총 3일이 걸리며, 상담했을 때 받을 수 있는 금액은 10이다. 5일에 잡혀있는 상담은 총 2일이 걸리며, 받을 수 있는 금액은 15이다. 상담을 하..
[Algorithm] 백준 2839 설탕 배달 - node.js 이 글은 백준 2839번 설탕 배달을 풀이한다. 알고리즘은 javascript를 이용해 구현하였다. 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 ..
[Algorithm] 최장 증가 부분 수열(LIS: Least Increasing Subsequence) 문제를 푸는 두 가지 알고리즘 이 글은 동적 계획법으로 풀 수 있는 유명한 알고리즘 문제인 최장 증가 부분 수열 문제와 이를 푸는 알고리즘 두 가지에 대해 설명한다. 최장 증가 부분 수열 문제 어떤 임의의 수열이 주어질 때, 이 수열에서 몇 개의 수를 제거해서 부분 수열을 만들 수 있다. 주어진 수열에서 얻을 수 있는 증가 부분 수열 중 가장 긴 것을 찾는 문제를 최대 증가 부분 수열 찾기 문제(LIS: Least Increasing Subsequence)라고 부르며, 이는 매우 유명한 동적 계획법 알고리즘 문제 중 하나이다. 이 문제를 푸는 대표적인 알고리즘이 두 가지 존재한다. 알고리즘 답을 구하는 데에 필요한 배열 A, D를 정의하자. A[i], D[i]는 다음과 같다. A[i]: 수열의 i번째 수 D[i]: A[i]를 마지막 ..