반응형

이번 문제는 [프로그래머스 - 스택/큐 - 다리를 지나는 트럭] 입니다!

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42583

 

코딩테스트 연습 - 다리를 지나는 트럭 | 프로그래머스

트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이는 bridge_length이고 다리는 무게 weight까지 견딥니다. ※ 트럭이 다리에 완전히 오르지 않은 경우, 이 트럭의 무게는 고려하지 않습니다. 예를 들어, 길이가 2이고 10kg 무게를 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서

programmers.co.kr

문제는 다음과 같습니다.

 

[입력 예시]

위와 같이 다리 길이, 다리 허용 무게, 순서대로 지나가야 하는 트럭이 주어졌을 때, 총 걸리는 시간을 구하라!

모든 트럭의 속도는 1이며, 트럭은 배열에 주어진 순서대로 반드시 지나가야 합니다.

 

저는 다음과 같이 문제를 풀었습니다.

1. 변수 : 

  1) bridge : 다리에 올라가 있는 트럭을 나타낸 배열

  2) bridge_length : 다리의 길이

  3) weight : 다리 허용 무게

  4) truck_weights : 트럭의 무게를 지나야 하는 순서대로 나타낸 배열

 

2. 방법 : 

  1) bridge 생성, bridge에 올라가야 하는 첫번째 트럭 삽입 (bridge[-1])

  2) 다리 위에 한대의 트럭이 더 올라갈 수 있는지 확인

    2-1) True : 트럭을 새로 삽입

    2-2) False : 다리 위의 트럭들을 한칸 왼쪽으로 이동시킴

  3) 더 이상 다리 위에 올라갈 수 있는 트럭이 없는 경우 마지막 트럭이 빠져나올 때까지의 시간을 구한다.

 

3. 후기 :

 

위와 같은 방법으로 문제를 풀어 아래와 같은 코드를 작성하였습니다.

다만, 아래와 같은 방법은 간신히(성공했다, 실패했다를 반복합니다.) 시간 Limit를 통과했는데요, 이유는 pop(0)때문입니다. 리스트에서 pop(0)을 하게 되면, 0번째 요소를 빼낸 뒤 나머지 요소들의 index를 재배열하는 과정을 거치게 됩니다. 따라서 pop(0)은 매우 지양해야 하는 방법입니다. 

 

→ truck_weights를 거꾸로 재배열 한 뒤, pop을 사용하는 방법이 훨씬 효율적으로 사용하는 방법입니다. 참고하세요.(제 코드는 정말 허접하게 푼거라 부끄럽네요..) 이상 끝-!

 

 

반응형

+ Recent posts