아오 이건 며칠간 고민했는데 못 풀었다.
out of index로 싸움하고 나중에는 음 만약 길이 2인 다리를 차 1대만 지나가면 2초가 아니라 총 3초가 필요한데
그 다음부터는 2초면 끝난다. 이걸 또 어떻게 처리할까로 고민하다 너무 짜증나서 그냥 답을 봐버렸다.
답 보고 공부나 해야지. 내 실력이 이것 밖에 안되니 더 열심히 해야겠다.
할 것도 많은데 자꾸 시간 낭비를 어디선가 한다. 최대한 낭비를 줄이자. 아래는 내 코드인데
계속 이런 식으로 접근했다. 머 class도 써보고 별의 별 방식으로 접근했다.
def solution(bridge_length, weight, truck_weights):
time = 0
end_num = len(truck_weights)
time_num = 0
end_list = []
on_bridge = []
on_bridge_time = [0]
while len(end_list) != end_num :
if on_bridge_time[time_num] == bridge_length:
end_list.append(on_bridge[0])
del on_bridge[0]
time_num += 1
if sum(on_bridge) + truck_weights[0] <= weight:
on_bridge.append(truck_weights[0])
truck_weights.sort(reverse=True)
if on_bridge_time[time_num] != 0: # 처음을 위해서
on_bridge_time.append(0)
on_bridge_time = [x + 1 for x in on_bridge_time]
time += 1
return time
아래 코드는 블로그에서 가져왔는데
이걸 보고 코드가 처음에는 이해가 잘 안 갔다. 그래서 주석으로 해설을 좀 해놨다.
def solution(bridge_length, weight, truck_weights):
time = 0
q = [0] * bridge_length
while q:
time += 1
q.pop(0) # 시간이 흐름에 따라 1칸 움직임
if truck_weights: #트럭 들이 다 있는 동안
if sum(q) + truck_weights[0] <= weight: # 다리에 있는 차 무게 + 대기 차 1번 무게
q.append(truck_weights.pop(0)) #대기 차 빼서 다리에 넣음
else:
q.append(0) #다리에 차가 안 들어오면 한 칸 앞으로 움직임
return time
와 이거 처음 보고 이해했을 때 코드를 보지 않고는 나는 절대 생각 못 했겠지라는 생각이 들었다.
이 코드가 작동하는 모습을 머릿속으로 그려보면 근데 정말 차가 도로를 지나가는 느낌이라 재미있다.
나도 pop을 쓸껄. pop 쓰면 index 문제 없이 잘 구현할 수 있었겠다.
아래는 다른 코드다. 여기서도 pop을 썼다. 이건 조금 이해하기 어려웠는데 주석을 넣어보며 이해를 해봤다.
핵심은 내가 pop()을 생각 못 해서 자꾸 이상하게 했다는 거다. 뭔가 코드 작성할 때는 아래 코드가 더 작성은 쉬울 것 같기도 하다. 내일 다시 풀어봐야겠다
def solution(bridge_length,weight,truck_weights):
answer = 0
bridge_on = [0]* bridge_length
curr_weight = 0
while truck_weights:
answer+=1
bridge_out = bridge_on.pop(0) #bridge_on 한 칸 전진
curr_weight -= bridge_out #차가 있으면 차량 무게만큼 - 없으면 0 -
if curr_weight + truck_weights[0] > weight: #다리에 있는 무게가 더 많이 나가면 pass
bridge_on.append(0)
else:
truck = truck_weights.pop(0) #다리에 트럭이 탈 수 있으면 append
bridge_on.append(truck)
curr_weight += truck
while curr_weight>0: # 트럭이 on_bridge인 경우 curr_weight 이 0이되어 다 빠질 때 까지
answer +=1
bridge_out = bridge_on.pop(0)
curr_weight -=bridge_out
return answer
출처 : assaeunji.github.io/python/2020-05-08-pgtruck/
프로그래머스 더 맵게 파이썬 (0) | 2021.03.23 |
---|---|
프로그래머스 더 맵게 파이썬 (0) | 2021.03.23 |
프로그래머스 전화번호 목록 python (0) | 2021.03.17 |
프로그래머스 - 전화번호 목록 (0) | 2021.03.17 |
프로그래머스 체육복 (0) | 2021.03.16 |
댓글 영역