n, m = map(int, input().split())
take = []
takeOff = []
for i in range(n):
tk, tkO =map(int, input().split())
take.append(tk)
takeOff.append(tkO)
take.sort()
takeOff.sort()
res = take[n -1]
res += take[n-1] - takeOff[0]
res += takeOff[n-1] - takeOff[0]
res += m - takeOff[n-1]
print(res)
오류
태우는 순간 다음 태우러 가는 인덱스와 데려다 줘야할 인덱스를 계산해서 최적 경로를 찾는것 같다. 저 코드는 계산x
손님을 태운순간, 데려다 준 순간 가야할 선택지는 두가지이다 다음 손님 vs 지금 손님의 도착 장소
그 중 이득인 걸 고르면 됨
코드
n, m = map(int, input().split())
take = []
takeOff = []
res = 0
for i in range(n):
tk, tkO =map(int, input().split())
take.append(tk)
takeOff.append(tkO)
tmp = 0
tk = 0
tko = 0
res = take[tk]
if (takeOff[tk] - tmp) > (take[tko] - tmp):
tk += 1
tmp = take[tk]
else:
오류
사람을 태우면 가야할 거리를 저장해놔서 현재 거리에서 다음에 태울 사람까지 거리와 저장된 가야할 거리중에서 가까운 곳이 있는지 비교해야 하는것 같다.
코드
n, m = map(int, input().split())
take = []
takeOff = []
res = 0
for i in range(n):
tk, tkO =map(int, input().split())
take.append(tk)
takeOff.append(tkO)
go = []
tmp = take[0]
nt = 1
res = take[0]
go.append(takeOff[0])
def findMinI():
minI = 0
minV = abs(go[0] - tmp)
for i in range(len(go)):
if minV > abs(go[i] - tmp):
minV = abs(go[i] - tmp)
minI = i
elif minV == abs(go[i] - tmp):
if go[i] < go[minI]:
minI = i
return minI
while True:
if nt == n:
while len(go) != 0:
minI = findMinI()
res += abs(tmp - takeOff[minI])
tmp = takeOff[minI]
del go[minI]
break
minI = findMinI()
minV = go[minI]
if abs(tmp - minV) < abs(tmp - take[nt]):
res += (tmp - takeOff[minI])
tmp = takeOff[minI]
del go[minI]
else:
res += abs(tmp - take[nt])
go.append(takeOff[nt])
tmp = take[nt]
nt += 1
res += abs(tmp - m)
print(res)