Softeer - 조립라인 - Java

chaemin·2024년 2월 22일
0

Softeer

목록 보기
7/8

1. 문제

https://softeer.ai/practice/6287

2. 풀이

참고 해설
https://www.youtube.com/watch?v=AL2kE84ec3E

일단 문제 이해가 좀 어려웠다. 문제를 이해하도록 노력하자!!!

2-1. ✨핵심 Point

DP 유형

3. 코드

import java.util.*;
import java.io.*;

public class Main {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		int workA[] = new int[N];
		int workB[] = new int[N];
		int moveA[] = new int[N];
		int moveB[] = new int[N];
		
		int dp[][] = new int[2][N];
		//dp[0] : A의 최소 작업시간
		//dp[1] : B의 최소 작업시간
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < N - 1; i++) {
			workA[i] = Integer.parseInt(st.nextToken());
			workB[i] = Integer.parseInt(st.nextToken());
			moveA[i] = Integer.parseInt(st.nextToken());
			moveB[i] = Integer.parseInt(st.nextToken());
		}
		
		st = new StringTokenizer(br.readLine(), " ");
		workA[N-1] = Integer.parseInt(st.nextToken());
		workB[N-1] = Integer.parseInt(st.nextToken());
		
		dp[0][0] = workA[0];
		dp[1][0] = workB[0];
		
		for(int i = 1; i < N; i++) {
			dp[0][i] = Math.min(dp[0][i-1], dp[1][i-1] + moveB[i-1]) + workA[i];
			dp[1][i] = Math.min(dp[1][i-1], dp[0][i-1] + moveA[i-1]) + workB[i];
		}
		
		// A와 B중에 최소 작업시간을 구한다.
		System.out.println(Math.min(dp[0][N-1], dp[1][N-1]));

	}

}

0개의 댓글