동일한 자동차를 생산하는 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]))
반응형
'Programming > Python' 카테고리의 다른 글
[Python3] 2023 kakao blind recruitment - 개인정보 수집 유효기간 - 프로그래머스 문제 풀이 (0) | 2023.10.13 |
---|---|
[Python3] 구슬탈출 2 - 백준 골드1 (0) | 2023.09.12 |
[Python3] 전광판 - Softeer(LEVEL2) (0) | 2023.08.08 |
[Python3] 1629 곱셈 - 백준(실버1) - 분할정복 (재귀 없이 풀기) (2) | 2023.08.07 |
[Python3] GBC - Softeer(LEVEL2) (1) | 2023.08.05 |