티스토리 뷰

반응형

https://softeer.ai/practice/info.do?idx=1&eid=403 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

[문제]

동일한 자동차를 생산하는 2개의 조립 라인 A와 B가 있다. 두 조립라인에는 각각 N개의 작업장이 있다. 각각의 작업장을 Ai (1 ≤ i ≤ N)와 Bi (1 ≤ i ≤ N)로 표시하자. Ai 작업장과 Bi 작업장은 동일한 작업을 수행하지만 작업시간은 다를 수 있다. A 조립 라인의 경우 A1 작업장에서 최초 조립이 시작되고, Ai 작업장에서 작업이 종료되면 바로 Ai+1 작업장에서 작업을 시작할 수 있다.

 

B 조립 라인도 동일한 방식으로 조립을 진행한다. Ai 작업장에서 Bi+1작업장으로 혹은 Bi 작업장에서 Ai+1작업장으로 반조립 제품의 이동이 가능(이동시간이 추가됨)할 때 자동차 1대의 가장 빠른 조립 시간을 구하여라.

 

[풀이]

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


public class Main
{
   static int N; // 1<= N <= 1000 작업장의 수
	static int[][] A; // A 장업장의 작업시간, B작업장의로의 이동시간
	static int[][] B; // B 장업장의 작업시간, ㅁ작업장의로의 이동시간
	static int TIME, TIMEA, TIMEB = 0;
	
	public static void main(String[] args) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		
		N = Integer.parseInt(br.readLine());
		
		A = new int[N][2];
		B = new int[N][2];
		
		for (int i = 0; i < N; i++)
		{
			st = new StringTokenizer(br.readLine());
			
			A[i][0] = Integer.parseInt(st.nextToken()); // Ai작업장의 작업시간
			B[i][0] = Integer.parseInt(st.nextToken()); // Bi작업장의 작업시간
			
			if (i != (N - 1))
			{
				A[i][1] = Integer.parseInt(st.nextToken());
				B[i][1] = Integer.parseInt(st.nextToken());
			}
		}
		
		int nWorkA, nTimeA = 0;
		int nWorkB, nTimeB = 0;
		
		nWorkA = nWorkB = 0;
		
		for (int i = 0; i < N - 1; i++)
		{
			if (N == 1)
				break;
			
			nTimeA = Math.min(A[i][0] + nWorkA, B[i][0] + B[i][1] + nWorkB);
			nTimeB = Math.min(B[i][0] + nWorkB, A[i][0] + A[i][1] + nWorkA);
			
			nWorkA = nTimeA;
			nWorkB = nTimeB;
		}
		nTimeA += A[N - 1][0];
		nTimeB += B[N - 1][0];
		
		System.out.println(Math.min(nTimeA, nTimeB));
	}
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함