[프로그래머스] 다리를 지나는 트럭

박지예·2023년 9월 3일
0

코딩테스트

목록 보기
7/17

문제

문제

제일 큰 문제는 글을 이해하지 못하는 내 문해력...!
계속 반복해서 읽어도 이해하지 못해서 직접 손으로 로직을 그리면서 이해했다.
질문하기 탭에서 다른 사람이 정리해준 글도 도움이 되었다.

하지만

문제를 겨우 이해했지만 로직을 짜는 건 힘들었다.
Queue를 사용해야 한다는 사실만 어렴풋이 짐작한채 나름 로직을 작성했다.

실패

처음에 queue를 순회하고 무게 조건에 따라 제거 될때마다
다리 길이 - 현재 queue 길이 + 1 을 더해줬다.
이런 로직이면 트럭 다리를 지날때 맨 앞의 트럭만 이동하고 뒤의 트럭은 전혀 이동하지 못한 상태로 머무르게 된다.

정답

using System;
using System.Collections.Generic;

public class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights)
    {
        int answer = 0;

        Queue<int> queue = new Queue<int>();
        int index = 0;
        int currentW = 0;
        int time = 0;

        while (true)
        {
            if (index == truck_weights.Length) break;

            if (queue.Count == bridge_length) currentW -= queue.Dequeue();

            if (currentW + truck_weights[index] <= weight)
            {
                currentW += truck_weights[index];
                queue.Enqueue(truck_weights[index]);
                index++;
            }
            else
                queue.Enqueue(0);

           time++;
        }

        answer = time + bridge_length;
        return answer;
    }

}
  1. 트럭 카운트가 받아온 배열의 길이가 같으면 반복문 탈출
  2. 큐 카운트와 다리의 길이가 같으면 총 무게에서 큐 제거.
  3. 총 무게 + 현재 트럭의 무게가 제한 무게 보다 작거나 같을 시 즉, 트럭을 더 다리에 올릴 수 있을 시
    3-1. 총 무게 + 현재 트럭의 무게
    3-2. 큐 데이터 삽입
    3-3. 트럭 카운트 더하기
  4. 트럭을 다리에 올릴 수 없을 시, 기존 트럭만 이동한다. (0을 Enqueue)
  5. 마지막 반복문을 탈출하기 전까지 time 마지막 트럭의 탑승 시간
    마지막 트럭의 탈출 시간 = 마지막 트럭의 탑승 시간 + 길이
profile
언젠간 바다로 갈거야!🐋

0개의 댓글