2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 이해 & 기본 개념 계단은 1~2칸 씩 이동할 수 있다. 3칸을 연속으로 밟아선 안된다. 마지막 계단은 반드시 밟아야한다. 위의 조건에 한해서 계단을 밟았을 때 받을 수 있는 가장 높은 점수를 구하는 문제 중요 포인트 해당 문제에서의 중요 포인트는 아래와 같다. 맨 뒤에서부터 시작 문제 조건에서 마지막 계단은 무조건 밟아야한다고 명시되어 있다. 시작점을 마지막 계단으로 놓고 내려가는 방식으로 구현하면 쉽다. 연속으로 3개의 계단을 밟는 경우 판별 이전에 몇 칸을 뛰어서..
1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 문제 이해 & 기본 개념 아래 3가지 방법을 통해 입력 받은 수를 1로 만드는 것 X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 최소 횟수를 구해야하는 문제 3으로 나누는게 1을 빼는 것보다 수가 훨씬 작아지므로 자칫하면 그리디 문제로 오해할 수 있다. ex) n = 10 10 -> 9 -> 3 -> 1 10 -> 5 -> 4 -> 2 -> 1 이처럼 가능한 큰 수로 나누는 것보다 1을 먼저 빼는 경우가 최소 횟수가 될 수도 있기 때문에 dp를 이용한다. 최종 풀이 파란색이 처음 계산 되는 부분 빨간색이 중복 계산 되는 ..
11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net 문제 이해 & 기본 개념 수열에서 증가하는 부분 (이어질 필요 x)에서 가장 합이 큰 경우를 찾아야하는 문제 중요 포인트 모든 경우의 수를 보는 방법도 있긴 하겠지만, 중복된 연산이 많이 발생 중복된 연산을 줄이기 위해 dp를 사용하면 간단하게 풀 수 있음 최종 풀이 점화식 dp[i] = max(dp[i], dp[j] + a[i]) i는 현재 위치, j는 이전에 선택된 원소의 위치 dp[i]는 i까지의 최..