개발/알고리즘

백준 1149번 RGB거리

dev-yoon-jerry 2021. 6. 9. 15:27

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

백준님이 코테에서 dp는 잘 안 나온다고 하셨지만 그래도 dp문제를 잘 못 푼다고 생각해서.. 쉬운 문제를 풀어보았다.

풀면서 DP의 기본은 dp[i] = dp[i-1] + a 라는 것을 알게되었다. (이전값을 통해서 현재값을 계산

이문제의 경우에는 이전 값을 통해서 다음 값을 계산하기 때문에 굳이 리스트를 통해 dp테이블을 가지고 있을 필요는 없었다. 하지만 dp문제를 접했을 때 dp테이블을 사용하는 경우가 많기 때문에 리스트나 배열을 통해 테이블을 생성하여 푸는 습관은 좋은 것 같아서 코드에 남겨두었다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class bj1149 {
	static int N;
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		int pre1 = 0;
		int pre2 = 0;
		int pre3 = 0;
		ArrayList <int[]>scores = new ArrayList<>(); //결과리스트
		for(int n=0;n<N;n++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int now1 = Integer.parseInt(st.nextToken());
			int now2 = Integer.parseInt(st.nextToken());
			int now3 = Integer.parseInt(st.nextToken());
			//이전 결과를 통해 현재결과 계산//
			int min1 = Math.min(now1+pre2,now1+pre3); 
			int min2 = Math.min(now2+pre1, now2+pre3);
			int min3 = Math.min(now3+pre1, now3+pre2);
			scores.add(new int[] {min1,min2,min3});
			//pre에 현재결과 저장(다음 값 계산을 위해)//
			pre1=min1;
			pre2=min2;
			pre3=min3;
		}
		System.out.println(Math.min(Math.min(pre1, pre2), pre3));
	}
}

 

 

'개발 > 알고리즘' 카테고리의 다른 글

백준 1062번 가르침  (0) 2021.06.17
백준 9465번 스티커  (0) 2021.06.10
백준 11725번 트리의 부모 찾기  (0) 2021.06.08
백준 2644번 촌수계산  (0) 2021.06.08
백준 21608번 상어초등학교  (0) 2021.06.07