프로그래머스 - 다리를 지나는 트럭 (스택/큐)를 풀어봤습니다. 역시나 다른 풀이에는 정말 간단히 푼 사람들이 많더군요. 저는 저만의 방식대로 일단 풀었다는데 의의를...
문제 설명
접근 방법
- 해시를 통해 다리를 지나는 트럭이 몇 초 간 운행했는지를 기록.
key
는 트럭의 index 값,value
는 경과 시간 (초). - 다리를 지나지 않은 트럭을 나타내는 큐를 2개 생성. 각각 트럭의 중량과, 트럭의 idx를 의미함.
- while loop를 돌려서 매 초 카운트가 되게 한다.
- 현재 다리 위에 있는 트럭들을 해시를 통해 찾고, 1초를 더한다. 만약 운행 시간이 다리의 길이와 같다면, 해시값을 수정해서 다 건넜다고 표시한다.
- 만약 현재 다리 위에 있는 트럭의 무게와, 대기 중인 트럭 큐의 첫번째 트럭 중량의 합이 허용 범위 이내라면, 큐에서 pop한다.
다소 복잡하고 무식하지만 결과는 패스!
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <string> #include <vector> #include <queue> #include <iostream> #include <algorithm> #include <unordered_map> using namespace std; int solution(int bridge_length, int weight, vector<int> truck_weights) { int answer = 0; // crossing truckes counter. unordered_map<int, int> ing; for (int i=0; i<truck_weights.size(); i++) { ing[i] = 0; } // add all trucks on Queue queue<int> q; for (auto z : truck_weights) { q.push(z); } // add all truck idx on Queue queue<int> q_idx; for (int i=0; i<truck_weights.size(); i++) { q_idx.push(i); } int crossing = 0; bool endCond = true; while(endCond) { // check if crossing truckes are done! for (int i=0; i<truck_weights.size(); i++) { if (ing[i] == bridge_length) { crossing -= truck_weights[i]; ing[i] = 0; } else if (ing[i] != 0) { ing[i]++; } } // check if another crossing is ok. if (q.size() != 0 && crossing + q.front() <= weight) { crossing += q.front(); ing[q_idx.front()]++; q.pop(); q_idx.pop(); } answer++; // check end condition. (if all ings are 0.) for (int i=0; i<truck_weights.size(); i++) { if (ing[i] != 0) { break; } if (i == truck_weights.size()-1) { // end!! endCond = false; } } } return answer; } | cs |
'Developer > C, C++' 카테고리의 다른 글
[C++] 프로그래머스 - 더 맵게 (힙) (0) | 2022.01.05 |
---|---|
[C++] 프로그래머스 - 주식가격 (스택/큐) (0) | 2022.01.04 |
[C++] 프로그래머스 - 프린터 (스택/큐) (0) | 2022.01.02 |
[C++] 프로그래머스 - 기능개발 (스택/큐) (0) | 2022.01.01 |
[C++] 프로그래머스 - 위장 (해시) (0) | 2021.12.31 |
댓글