dp(5)
-
[프로그래머스] 점프와 순간 이동 - DP문제
효율성 테스트까지 있는 문제로 처음 DP로 풀어야겠다고 생각하고 풀이를 시작하였다. 프로그래머스 점프와 순간 이동 코딩테스트 연습 - 점프와 순간 이동 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈 programmers.co.kr 문제는 N칸을 이동해야한다. 그러나 조건이 있다. (현재까지 온 거리) * 2에 해당하는 위치로 순간이동이 가능하고 이 경우에는 건전지의 소비량이 들지 않는다. 그러나 K칸을 이동하게 되면 이 경우에는 K 만큼의 건전지가 소비된다. 그러므로 순간이동을 하는 것이 효율적이다. 여기서 N칸을 이동하려고 할 때, 가장 건전지의 사용..
2020.11.01 -
[백준 10844번] 쉬운 계단 수 - DP
백준 10844번 동적 계획법(Dynamic Programming)으로 풀 수 있는 문제이다. 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제는, 45656이란 수가 있다. 이 수를 잘보면 각 자리수마다 1씩 차이나는 것을 알 수 있다. 이런 수를 계단 수라고 한다. 그렇다면 길이가 N개인 계단 수는 몇 개가 나올 수 있는지 구하는 것이 문제이다. 단, 마지막 정답에 1,000,000,000으로 나눈 나머지를 출력한다. 이 문제를 풀면서 주의해야할 점은 0으로 시작하는 숫자는 없다는 것이다. 즉, 0~9까지의 각 자리수가 있지만 첫 자리에는 0이 절대 올 수 없다는 것이다. 그렇다면 DP로 풀기 위해 먼저 첫 자리 수 ..
2020.10.19 -
[백준 11053번] 가장 긴 증가하는 수열 - DP
백준 11053번 동적 계획법(Dynamic Programming)으로 풀 수 있는 문제이다. 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제는, 수열 A에서 이를 어떻게하면 가장 긴 부분 수열로 나열할 수 있고, 이의 길이를 출력으로 보여주는 문제이다. 처음 문제의 풀이 과정을 생각할 때, 너무 단순하게 생각했다. 왜 이 문제를 DP을 이용해서 풀어야하는지 몰라서 소팅을 실행하고 중복된 숫자만 제거해서 최종적으로 남은 숫자의 ..
2020.10.15 -
[백준 2156번] 포도주 시식 - DP
백준 2156번 동적 계획법(Dynamic Programming)으로 풀 수 있는 문제이다. 문제를 읽어보면, 포도잔의 개수가 N개 있고, 이를 선택하여 마실 수 있다. 그러나 조건이 있다. 연속해서 위치한 3잔을 모두 마실 수는 없다. 여기서 가장 많은 양의 포도주를 마실 수 있는 양은 얼마인지 구해야한다. 점화식을 생각하게 되었고, 이전에 풀어봤던 문제 유형이랑 비슷해서 방법을 떠올리는 건 쉽게할 수 있었다. 그러나, 하나 사소한 부분에서 실수로 return문을 적지 않아 '왜 틀렸지...'하며 시간을 조금 낭비했다. DP로 풀기 위해선 점화식을 세우는게 중요한데, 우선 초기 조건을 잘 확인해서 풀어야한다. N이 1, 2, 3일 때를 나누어서 초기 조건을 세웠다. if (N == 1) { System..
2020.10.02 -
[백준 1912번] 연속합 - DP
백준 1912번 동적 계획법(Dynamic Programming)으로 풀 수 있는 문제이다. 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 먼저 문제를 보고 시작하면, n개의 정수로 이루어진 수열을 입력으로 받는다. 그리고 이 중 몇 개의 수를 선택해서 모두 더한다. 이 중 가장 크게 나올 수 있는 수를 찾는 문제이다. 여기서 주어진 조건은 꼭 연속된 수를 선택하여야한다. 여기서 처음 문제를 풀 때, 실수를 하였던 부분은 N개의 숫자를 연속으로 선택해서 합이 가장 큰 수를 선택하여야하기 때문에 모든 경우의 수를 더하는..
2020.09.30