[프로그래머스] 42583 다리를 지나는 트럭(Lv2) - 큐

2024. 6. 30. 23:22·코딩 테스트/자료구조

문제

입출력 예시

코드

도저히 내 머리로는 못풀겠어서 다른 사람의 코드를 보고 이해하는 식으로 진행했다.

우선 다리를 Queue로 선언하고 아래 세 조건에 따라 트럭을 이동하도록 했다.

  1. 큐(다리)가 비어있는 경우
    큐(다리)에 트럭을 올리고 올리는 시간(time+=1), 현재 다리 위 트럭의 무게(bridge_weight)를 업데이트 한다.
  2. 큐(다리)가 가득 차지 않은 경우
    • 대기 중인 트럭을 큐(다리)에 올릴 수 있는 경우
      (현재 다리 위 트럭의 무게(bridge_weight) + 대기중인 다음 트럭의 무게(truck_weights[i])가 최대 수용 가능한 무게(weight)보다 큰 경우(bridge_weight+truck_weights[i] > weight))
      • 대기중인 트럭을 올릴 수 없다.
      • 현재 트럭을 1초 이동해야 한다.
        • time += 1
      • 다음 대기 중인 트럭을 올릴 수 없으니 임시로 0을 추가해서 q.size()를 +1 해준다.
        • q.add(0)
    • 대기 중인 트럭을 큐(다리)에 올릴 수 없는 경우
      (현재 다리 위 트럭의 무게(bridge_weight) + 대기중인 다음 트럭의 무게(truck_weights[i])가 최대 수용 가능한 무게(weight)보다 작은 경우(bridge_weight+truck_weights[i] <= weight))
      • 현재 다리 위에 있는 트럭을 1초 이동시키고 다음 트럭이 진입할 수 없으므로 0을 큐에 삽입한다.
  3. 큐(다리)가 가득 찬 경우 -> 맨 앞 트럭이 다리 끝에 도달한 경우
    • 다리의 끝에 도달한 트럭을 큐와 현재 다리 위 트럭의 무게(bridge_weight)에서 뺴준다.
    import java.util.*;

    class Solution {
        public int solution(int bridge_length, int weight, int[] truck_weights) {
            Queue<Integer> q = new LinkedList<>();

            int bridge_weight = 0;
            int time = 0;

            for (int i = 0; i < truck_weights.length; i++) {

                while(true) {
                    // 큐가 빈 경우
                    if (q.isEmpty()) {
                        // 큐(다리)에 트럭 올리기 (올리는 시간 1)
                        q.add(truck_weights[i]);
                        bridge_weight += truck_weights[i];
                        time += 1;
                        break; // 트럭을 올렸으니 다음 트럭으로 이동
                    }

                    // 큐(다리)가 가득차지 않은 경우
                    else if (q.size() == bridge_length) {
                        bridge_weight -= q.poll();

                    }

                    // 큐(다리)가 가득 찬 경우
                    // 맨 앞 트럭이 다 왔다는 뜻 -> 큐(다리)에서 맨 앞에 있는 트럭 뺴기
                    else { // q.size() == bridge_length
                        // 다음 트럭을 올릴 수 없는 경우 -> 기존의 트럭을 1칸(1초) 이동
                        if (bridge_weight+truck_weights[i] > weight) {
                            q.add(0);
                            time += 1;
                        }

                        // 다음 트럭을 올릴 수 있는 경우 -> 새로운 트럭 올리기(1초)
                        else {
                            q.add(truck_weights[i]);
                            bridge_weight += truck_weights[i];
                            time += 1;
                            break; // 트럭을 올렸으니 다음 트럭으로 이동
                        }

                    }
                }
            }
            return time + bridge_length; 
        }
    }

'코딩 테스트 > 자료구조' 카테고리의 다른 글

[백준] 1966 프린터 큐(실버3) - 큐(Queue)  (0) 2024.07.01
[프로그래머스] 42584 주식가격(Lv2) - 스택  (0) 2024.06.30
[프로그래머스] 42587 프로세스(Lv2) - 큐(우선순위 큐)  (0) 2024.06.29
[프로그래머스] 42586 기능개발(Lv2) - 배열(스택, 큐)  (0) 2024.06.28
[프로그래머스] 12906 같은 숫자는 싫어(Lv1)  (0) 2024.06.28
'코딩 테스트/자료구조' 카테고리의 다른 글
  • [백준] 1966 프린터 큐(실버3) - 큐(Queue)
  • [프로그래머스] 42584 주식가격(Lv2) - 스택
  • [프로그래머스] 42587 프로세스(Lv2) - 큐(우선순위 큐)
  • [프로그래머스] 42586 기능개발(Lv2) - 배열(스택, 큐)
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준 #dfs #알고리즘
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    solid #객체지향설계원칙
    bfs #프로그래머스
    bfs #최단거리탐색 #프로그래머스
    이진탐색 #이분탐색 #알고리즘
    백준 #dfs #11725번
    프로그래머스 #dfs
    프로그래머스 #dp
    백준 #아기상어2 #bfs
    백준 #이진탐색 #이분탐색
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    git filter-branch #commit 수정 #commit
    이진탐색 #이분탐색 #백준
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    백준 #dfs
    dfs #알고리즘
    백준 #bfs
    nvidia container toolkit #
    dp #백준 #동적계획법
    git filter-repo
    백준 #dp #동적계획법
    티스토리챌린지
    dfs #백준
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    bfs #백준
    오블완
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    피보나치 수 #백준 #dp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[프로그래머스] 42583 다리를 지나는 트럭(Lv2) - 큐
상단으로

티스토리툴바