이번 문제는 [프로그래머스 - 스택/큐 - 다리를 지나는 트럭] 입니다!
문제 링크 : 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을 사용하는 방법이 훨씬 효율적으로 사용하는 방법입니다. 참고하세요.(제 코드는 정말 허접하게 푼거라 부끄럽네요..) 이상 끝-!
'Computer Science > 알고리즘' 카테고리의 다른 글
프로그래머스 풀이 - 코딩테스트 #힙 #더 맵게 (0) | 2019.10.29 |
---|---|
프로그래머스 풀이 - 코딩테스트 #스택/큐 #주식 가격 (0) | 2019.10.28 |
프로그래머스 풀이 - 코딩테스트#스택/큐#기능개발 (0) | 2019.10.21 |
프로그래머스 풀이 - 코딩테스트#스택/큐#탑 (0) | 2019.10.06 |
프로그래머스 풀이 - 코딩테스트#스택/큐#프린터 (0) | 2019.10.05 |