Lv 3. [1차] 셔틀버스

2024. 11. 26. 15:40·Algorithm & Data Structures/Programers

 

https://school.programmers.co.kr/learn/courses/30/lessons/17678

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

이 문제는 주어진 버스 스케줄과 대기자 명단을 기반으로
마지막 버스를 타기 위해 가장 늦게 도착해야 하는 시간을 계산한다.

먼저 timetable을 분 단위로 변환해 list에 저장하고,
이를 오름차순으로 정렬한다.

첫 번째 버스는 540분(09:00)부터 시작해 t분 간격으로 총 n번 운행하며,
각 버스는 최대 m명의 승객을 태울 수 있다.

반복문을 통해 각 버스의 출발 시간을 계산하며
대기자의 도착 시간이 버스 시간 이하인 경우 태울 수 있는지 확인한다.
마지막 버스의 경우, 자리가 남아 있다면 버스 시간에 맞춰 도착하면 되고,
자리가 없으면 마지막으로 태운 승객보다 1분 빨리 도착해야 한다.
최종적으로 계산된 시간을 시:분 형식으로 변환해 반환한다.

 

 

 

import java.util.*;

class Solution {
    
    private ArrayList<Integer> list;
    
    public String solution(int n, int t, int m, String[] timetable) {
        int cnt = 0;
        list = new ArrayList<>();
        
         for (String time : timetable) {
            String[] split = time.split(":");
            int hour = Integer.parseInt(split[0]);
            int minute = Integer.parseInt(split[1]);
            list.add(hour * 60 + minute);
        }
        
        Collections.sort(list);

        int index = 0;
        int answer  = 540+(n-1)*t;
                
        for(int i = 0 ; i < n ; i++){
            int busTime = 540 + (i * t);
            int capacity = m;
            
            while(list.size() > index && capacity > 0 && list.get(index) <= busTime){
                index++;
                capacity--;
            }

            
            if(i == n - 1){
                if (capacity > 0) {
                    answer = busTime;
                } else { 
                    answer = list.get(index - 1) - 1;
                }
            }
        }
        
        int hour = answer / 60;
        int min = answer % 60;
        return String.format("%02d:%02d",hour,min);
    }
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 3. 거스름돈  (0) 2024.12.02
Lv 3. 다단계 칫솔 판매  (0) 2024.11.28
Lv 3. 가장 긴 펠린드롬  (3) 2024.11.21
Lv 3. 부대복귀  (0) 2024.11.19
Lv 3. 경주로 건설  (1) 2024.11.13
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 3. 거스름돈
  • Lv 3. 다단계 칫솔 판매
  • Lv 3. 가장 긴 펠린드롬
  • Lv 3. 부대복귀
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (304) N
      • Algorithm & Data Structures (230) N
        • BOJ (89) N
        • SWEA (1)
        • Programers (136)
        • Data Structures (3)
      • DB (21) N
        • SQL (15) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    DynamicProgramming
    후위순회
    Dijkstra
    백트래킹
    BFS
    구현
    백준
    프로그래머스
    알고리즘
    baekjoon
    programmers
    dfs
    unionfind
    dp
    다익스트라
    전위순회
    algorithm
    스택
    이분탐색
    유니온파인드
    투포인터
    Stack
    위상정렬
    이진탐색
    PriorityQueue
    경로압축
    binarySearch
    Java
    동적계획법
    Union-Find
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 3. [1차] 셔틀버스
상단으로

티스토리툴바