https://softeer.ai/practice/6287
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
풀이
처음에는 BFS를 통해 가장 빠른 조립시간을 구하려 했다. 하지만 BFS로 수행할 시 메모리 초과가 발생했다.
풀이방법에 대해 더 생각해보았더니 DP를 사용하여 해당 작업장까지의 최소 조립시간을 구하는 방식으로 풀었다.
// 0 <= i <= n-1
dp[i][0]: A 조립라인의 i번째 작업장까지의 최소 조립시간
dp[i][1]: B 조립라인의 i번째 작업장까지의 최소 조립시간코드
import java.io.*;
import java.util.*;
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[] a = new int[n];
        int[] b = new int[n];
        int[] atoB = new int[n];
        int[] btoA = new int[n];
        for (int i = 0; i < n - 1; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            a[i] = Integer.parseInt(st.nextToken());
            b[i] = Integer.parseInt(st.nextToken());
            atoB[i] = Integer.parseInt(st.nextToken());
            btoA[i] = Integer.parseInt(st.nextToken());
        }
        StringTokenizer st = new StringTokenizer(br.readLine());
        a[n-1] = Integer.parseInt(st.nextToken());
        b[n-1] = Integer.parseInt(st.nextToken());
        int[][] dp = new int[n][2]; // 해당 작업장까지의 최소 조립시간
        dp[0][0] = a[0];
        dp[0][1] = b[0];
        
        for (int i = 0; i < n-1; i++) {
            dp[i+1][0] = Math.min(dp[i][0], dp[i][1] + btoA[i]);
            dp[i+1][0] += a[i+1];
            dp[i+1][1] = Math.min(dp[i][1], dp[i][0] + atoB[i]);
            dp[i+1][1] += b[i+1];
        }
        
        System.out.println(Math.min(dp[n-1][0], dp[n-1][1]));
    }
}
728x90
    
    
  'Algorithm 문제 풀이 > Softeer' 카테고리의 다른 글
| [Softeer/소프티어] 성적 평균 - 자바[Java] (0) | 2024.06.26 | 
|---|---|
| [Softeer/소프티어] 수퍼 바이러스 - 자바[Java] (0) | 2022.11.17 | 
| [Softeer/소프티어] 강의실 배정(그리디 : Greedy) - 자바[Java] (0) | 2022.11.01 | 
| [Softeer/소프티어] 징검다리(최장 증가 부분 수열 : LIS) - 자바[Java] (0) | 2022.11.01 |