Programming/Python

[Python3] 복잡한 조립라인2 - Softeer(LEVEL5)

아나엘 2023. 8. 8. 17:45

동일한 자동차를 생산하는 K개의 조립라인 Li (1 ≤ i ≤ K)가 있다. 한 조립라인에는 각각 N개의 작업장이 있다. 각각의 작업장을 Li,j (1 ≤ i ≤ K, 1 ≤ j ≤ N)로 표시하자.

 

모든 라인의 j번째 작업장은 동일한 작업을 수행하지만 작업 시간은 다를 수 있다. 모든 조립라인은 1번 작업장에서 최초 조립이 시작되며, j번째 작업장에서 작업이 종료되면 바로 j+1번째 작업장에서 작업을 시작할 수 있다.

 

Li,j 작업장에서 LK,j+1(i ≠ K) 작업장으로 이동이 가능한데 j값이 같으면 이동 시간은 모두 동일하다. 자동차 1대의 가장 빠른 조립 시간을 구하여라. 

제약조건

1 ≤ N ≤ 102 인 정수

1 ≤ K ≤ 104 인 정수

각 작업시간과 이동시간은 105을 넘지 않는 양의 정수 

입력형식

첫 번째 줄에 라인의 수 K와 작업장의 수 N이 주어진다.

j+1 (1 ≤ j ≤ N-1) 번째 줄에는 Li,j (1 ≤ i ≤ K) 작업장의 작업시간이 i의 오름차순으로 주어지고, Li,j 작업장에서 LK,j+1 (K ≠ i) 작업장까지 이동시간이 주어진다. 

출력형식

첫 번째 줄에 가장 빠른 조립시간을 출력하라. 

입력예제1
2 2 1 3 2 10 2
출력예제1
5

 

코드 (런타임에러)

import sys

lines = sys.stdin.readlines()
l0 = lines[0].split()
l1 = lines[1].split()
add = int(l1[0])

K= int(l0[0])
N = int(l0[1])

cnt = 0
# for i in range(len(lines)-1): #1이랑 마지막만 비교하명 됨
#     temp = lines[0].split()
for i in range(N-1):
    if int(l1[i+1]) <= int(l1[-1]) :
        # print('case1')
        add+=int(l1[i+1])
        cnt += 1
    else:
        # print('case2')
        add+=int(l1[-1])
        cnt += 1
        break
    break

K_spl = lines[K].split()
for i in range(N-cnt):
    # print('case3')
    add += int(K_spl[i+cnt])
print(add)

해결코드

import sys

K, N = map(int, sys.stdin.readline().split())

dp=[]
tt=[]
for i in range(N-1): #마지막라인 제외
    temp = list(map(int, sys.stdin.readline().split()))
    dp.append(temp[:K])
    tt.append(temp[-1]) #이동시간

dp.append(list(map(int, sys.stdin.readline().split())))


for i in range(N-1):
    tmp = min(dp[i]) 
    # print(tmp)
    for j in range(K):
        if i == j:
            dp[i+1][j] += dp[i][j]

        else:
            dp[i+1][j] += min(dp[i][j], tmp + tt[i])

print(min(dp[-1]))
반응형