Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

시간이 NullNull

[JAVA] [KAKAO] 셔틀버스 본문

알고리즘

[JAVA] [KAKAO] 셔틀버스

4NIng 2019. 9. 4. 22:09

주요 포인트!

1. 09:00 부터 n회 t분 간격으로 역에 도착한다.

나의 경우 09:00 부터라는 것을 제대로 못봐 문제가 이해가 되지 않아 한참동안 고민을 하였다.

2. m명을 태우면 더이상 태울 수 없다 ( 단, 기다리고 있는 줄은 유지된다. )

 

 

이를 기준으로 나는 그냥 단순히 09:00 부터 각 셔틀버스마다 태울 수 있는 만큼 태우자

그리고 끝난 뒤에

1. 마지막 버스에 m명이 가득 차 있다면 마지막에 탄사람보다 1분 일찍오자!

2. 마지막 버스에 자리가 빈다면 마지막 버스가 도착할 시점에 오도록 하자!

 

이를 구현하기 위해서 우선 크루들이 도착하는 시간을 오름차순으로 정렬해야한다. 그래야 시간 순으로 버스에 태울 수 있기 때문이다.

그리고 시간 계산과 대소관계 비교를 원활하게 하기 위해서 시간 * 60 + 분을 하여 그냥 24시간을 다 분으로 계산하여 대소관계를 비교하였다.

 

마지막에 return값인 내가 와야할 시점에서는 저 때 새벽에 풀어서 비효율 적이지만 삼항연산자만 알고 있다면 내가 왜 쉽게 그렇게 if문을 남발하였는지 알 수 있을 것이다.

 

package kakao;

import java.util.Arrays;

public class bus {

	public static void main(String[] args){
		String answer = "";
		int n = 10;
		int t = 60;
		int m = 45;
		String[] timetable = {"23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"};
		int[] times = new int[timetable.length];
		for(int i=0; i<times.length; ++i) {
			times[i] = Integer.parseInt(timetable[i].substring(0,2))*60+Integer.parseInt(timetable[i].substring(3,5));
		}
		Arrays.sort(times);
		int[][] waitOrder = new int[n][m];
		int[] waitOrderIdx = new int[n];
		int[] shuttle = new int[n];
		for(int i=0; i<n; ++i) {
			shuttle[i] = 540 + i * t;
		}

		for(int i=0; i<times.length; ++i) {
			for(int j=0; j<n; ++j) {
				if(times[i] <= shuttle[j]) {
					if(waitOrderIdx[j] >= m) {
						continue;
					}
					waitOrder[j][waitOrderIdx[j]] = times[i];
					waitOrderIdx[j]++;
					break;
				}
			}
		}
		int hour = 0;
		int min = 0;
		if(waitOrderIdx[n-1] >= m) {
			hour = waitOrder[n-1][m-1]/60;
			min = waitOrder[n-1][m-1]%60;
			if( min - 1 < 0 ) {
				answer = ""+( hour - 1 > 9 ? hour-1 : "0"+(hour-1))
						+":59"; 
			}else {							
				answer = ""+ ( hour > 9 ? hour : "0" + hour )
						+":"+( min-1 > 9 ? min-1 : "0"+(min-1));
			}
			
		}else {
			answer = ""+((shuttle[n-1]/60) > 9 ? (shuttle[n-1]/60) : "0"+(shuttle[n-1]/60))
					+":"+( (shuttle[n-1]%60) > 10 ? (shuttle[n-1]%60) : "0"+(shuttle[n-1]%60));
		}
		System.out.println(answer);
	}

}

 

'알고리즘' 카테고리의 다른 글

[JAVA] [BOJ] 17143. 낚시왕  (0) 2019.09.04
[JAVA] [SWEA] 2382. 미생물 격리  (0) 2019.09.04
[JAVA] [KAKAO] 자동완성  (0) 2019.09.04
[JAVA] [BOJ] 5052. 전화번호 목록 ver.2 Trie  (0) 2019.08.24
[JAVA] Trie 알고리즘  (0) 2019.08.24
Comments