-
[프로그래머스] 셔틀버스 (2018 KAKAO BLIND RECRUITMENT)ALGORITHM/PROGRAMMERS 2020. 12. 18. 01:43
programmers.co.kr/learn/courses/30/lessons/17678#
2020-12-18
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051import java.util.Arrays;public class Solution17678 {public static void main(String[] args) {String answer = "";int n = 2;int t = 10;int m = 3;String timetable[] = {"09:05", "09:09", "09:13"}; // test용// String timetable[] = {"09:10", "09:09", "08:00"}; // test용// String timetable[] = {"08:00", "08:01", "08:02", "08:03"}; // test용int time[] = new int[timetable.length];for(int i = 0; i < timetable.length; i++) {String str[] = timetable[i].split(":");time[i] = Integer.parseInt(str[0])*60 + Integer.parseInt(str[1]);}Arrays.sort(time);System.out.println(Arrays.toString(time));int start = 9*60;int ans = 0;// 콘은 셔틀을 무조건 타야한다 => 맨 마지막에 탑승할 수 있는 사람의 시간 -1 분int idx = 0;int count = 0;for(int i = 0; i < n; i++) {count = 0;for(int j = idx; j < time.length; j++) {if(time[j] <= start) {count++;}if(count == m) break; // 정원}idx += count; //index 변경if(i != n-1) start += t; // 시간}if(count < m) ans = start; //자리가 있으면 시작시간else ans = time[idx-1] - 1; // 자리가 없으면 맨 마지막에 타는 크루보다 1분 빨리 오기if(ans / 60 < 10) answer += "0";answer += (ans/60) + ":";if(ans % 60 < 10) answer += "0";answer += (ans % 60);System.out.println(answer);}}cs 문제를 이해하는데 굉장히 오랜 시간이 걸렸다. 아마 실제 시험이었다면, 손도 못 대고 끝났지 않았을까 싶다. 입출력 예제를 보고 이런 말인가 저런말인가 껴맞추면서 이해를 하려고 했다.
#문제풀이
1. 콘은 셔틀을 무조건 타야한다. 그래서 자리가 없으면 자리를 만들어서 타야하고, 자리가 있다면 대기열의 끝에서 바로 타면 된다.
2. 시간은 편의성을 위해 분으로 맞춘다. 또한, 크루의 도착 시각은 00:01와 23:59 사이이며, 23:59에는 무조건 집에 돌아간다. 그러므로 시간을 계산할 때 24시가 넘어간다거나 등의 일은 생각하지 않아도 된다.
3. 정해진 턴에서 대기열에서 탈 수 있는 만큼의 인원을 체크하고, 그 인원이 전부 탔으면 대기열 체크를 멈춘다. 그리고 다음 턴이 존재한다면 시간을 업데이트 시켜주고, 마지막 대기열 다음 차례부터 다시 대기열을 체크하게 된다.
4. n회만큼의 탐색이 끝나고 나서 마지막으로 count한 크루의 수가 m명(limit) 미만인 경우에는 자리가 있는 것이므로 마지막으로 체크된 시간에 콘이 셔틀을 타면된다. 만약 count한 크루의 수가 m인 경우에는 자리가 없는 것이므로, 마지막으로 타는 크루보다 1분 일찍 와서 셔틀을 타면 된다.
#실수
어이없는 실수를 했다. 계속해서 19번만 답이 틀렸었다. 아무리 봐도 로직상 틀린 부분이 없는 것 같았는데 19번만 실패라고 떴었다. 너무 답답해서 다른 사람들의 코드를 살펴봐도 로직상 틀린 부분은 없었다. 그래서 마지막으로 입력값부터 천천히 살펴봤는데, 마지막 분에 HH:MM으로 변형 시키는 코드에서 (44번째 줄) 실수가 있었다. 10이하인경우 앞에 "0"을 붙여줘야하는데, 숫자를 잘못 입력 했었다......
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 뉴스 클러스터링 (2018 KAKAO BLIND RECRUITMENT) (0) 2021.01.02 [프로그래머스] 비밀지도 (2018 KAKAO BLIND RECRUITMENT) (0) 2020.12.28 [프로그래머스] 추석 트래픽 (2018 KAKAO BLIND RECRUITMENT) (0) 2020.12.13 [프로그래머스] 정수 제곱근 판별 (0) 2020.12.13 [프로그래머스] 이상한 문자 만들기 (연습문제) (0) 2020.12.13