Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프렌즈4블록java
- 카카오1차
- 카카오기출
- 알고리즘
- java
- 자료구조힙
- 문자열포맷
- 백준 1000번
- 백준
- 카카오코테
- java method
- heap정렬
- 개발상식
- 공부정리
- 객체프로그래밍이란
- 자바문자열
- Java heap
- 힙정렬자바
- 백준 1924번
- 자료구조 트리
- 카카오코딩테스트
- heap
- 자바
- 프로그래머스
- 코테준비
- 코딩테스트기출
- 프렌즈4블록
- 백준 1000번 java
- 객체프로그래밍
- 백준 1924번 java
Archives
- Today
- Total
일단 시작해보는 블로그
[알고리즘_풀이] 카카오코딩테스트, 셔틀버스 (java) 본문
하,.........................
진짜 겨우풀었다.
아니 너무 복잡했어 ㅠㅠ
눈물나ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ흑흑흑..............................................
운동이나하러가야지..............................................
프로그래머스용 코드
import java.util.*;
class Solution {
static int[] crewTimeTable = null;
static int[] busTimeTable = null;
//stringToMinute()는 역할이 비슷하므로, overloading 해줬음.
//String으로 된 크루들의 도착 시간표를 분으로 나타낸 int[] crewTimeTable로 바꾼다.
static void stringToMinute(String[] timetable){
for(int i=0; i<timetable.length; i++){
int hour = Integer.parseInt(timetable[i].substring(0,2));
int minute = Integer.parseInt(timetable[i].substring(3, 5));
crewTimeTable[i] = hour*60 + minute;
}
}
//버스 시간표를 만든다. int[] busTimeTable = new int[n]; -> n번 운행하므로 n개 할당.
static void stringToMinute(int n, int t){
//09:00 첫출발, 9*60 = 540분
int firstTime = 540;
//총 n회 운영되므로 n번의 loop를 돌린다.
for(int i=0; i<n; i++){
busTimeTable[i] = firstTime+ t*i;
}
}
// 가장 늦은 도착시간 구하기
static int getToBusStopTime(int m){
int answer = 0;
int max = m;
boolean flag = false;
int tmp = 0;
List<Integer> consTime = new LinkedList<>();
Arrays.sort(crewTimeTable);
int i=0, j=0;
while(i<busTimeTable.length){
max = m;
flag = false;
tmp = 0;
j=0;
while(j<crewTimeTable.length){
if(crewTimeTable[j] < 0){
j++;
continue;
}
if(max <= 0){
consTime.add(tmp-1);
break;
}
if(busTimeTable[i] >= crewTimeTable[j]){
tmp = crewTimeTable[j];
crewTimeTable[j] = -1;
max -= 1;
}
j++;
}
//System.out.println(max);
printArr(crewTimeTable);
// 한번에 탈 때
if(max > 0){
max -= 1;
consTime.add(busTimeTable[i]);
}
i++;
}
if(max <= 0){
consTime.add(tmp-1);
}
Collections.sort(consTime);
System.out.println(consTime);
answer = consTime.get(consTime.size()-1);
return answer;
}
static String minuteToHourMin(int min){
String str = "";
String hour = String.valueOf(min/60);
String minute = String.valueOf(min - ((min/60)*60));
if(hour.length() < 2){
hour = "0" + hour;
}
if(minute.length() < 2){
minute = "0" + minute;
}
str = hour + ":" + minute;
return str;
}
static void printArr(int[] arr){
for(int ai : arr){
System.out.print(ai + " ");
}
System.out.println();
}
public static String solution(int n, int t, int m, String[] timetable) {
String answer = "";
//String으로 된 크루들의 도착 시간표를 분으로 나타낸 int[] crewTimeTable로 바꾼다.
crewTimeTable = new int[timetable.length];
stringToMinute(timetable);
//버스 시간표를 만든다. int[] busTimeTable = new int[n]; -> n번 운행하므로 n개 할당.
busTimeTable = new int[n];
stringToMinute(n, t);
//crewTimeTable과 busTimeTable 비교
int min = getToBusStopTime(m);
//String으로 변환하기
answer = minuteToHourMin(min);
return answer;
}
}
IDE용 코드
package codingTest;
import java.util.*;
public class Kakao_ShuttleBus {
static int[] crewTimeTable = null;
static int[] busTimeTable = null;
//stringToMinute()는 역할이 비슷하므로, overloading 해줬음.
//String으로 된 크루들의 도착 시간표를 분으로 나타낸 int[] crewTimeTable로 바꾼다.
static void stringToMinute(String[] timetable){
for(int i=0; i<timetable.length; i++){
int hour = Integer.parseInt(timetable[i].substring(0,2));
int minute = Integer.parseInt(timetable[i].substring(3, 5));
crewTimeTable[i] = hour*60 + minute;
}
}
//버스 시간표를 만든다. int[] busTimeTable = new int[n]; -> n번 운행하므로 n개 할당.
static void stringToMinute(int n, int t){
//09:00 첫출발, 9*60 = 540분
int firstTime = 540;
//총 n회 운영되므로 n번의 loop를 돌린다.
for(int i=0; i<n; i++){
busTimeTable[i] = firstTime+ t*i;
}
}
// 가장 늦은 도착시간 구하기
static int getToBusStopTime(int m){
int answer = 0;
int max = m;
boolean flag = false;
int tmp = 0;
// 탑승할 수 있는 시간을 LinkedList에 담는다. 이 후, 최댓값을 출력하면 됌.
List<Integer> consTime = new LinkedList<>();
Arrays.sort(crewTimeTable);
int i=0, j=0;
while(i<busTimeTable.length){
max = m;
flag = false;
tmp = 0;
j=0;
while(j<crewTimeTable.length){
if(crewTimeTable[j] < 0){
j++;
continue;
}
if(max <= 0){
consTime.add(tmp-1);
break;
}
if(busTimeTable[i] >= crewTimeTable[j]){
tmp = crewTimeTable[j];
crewTimeTable[j] = -1;
max -= 1;
}
j++;
}
// 한번에 탈 때
if(max > 0){
max -= 1;
consTime.add(busTimeTable[i]);
}
i++;
}
if(max <= 0){
consTime.add(tmp-1);
}
Collections.sort(consTime);
System.out.println(consTime);
answer = consTime.get(consTime.size()-1);
return answer;
}
static String minuteToHourMin(int min){
String str = "";
String hour = String.valueOf(min/60);
String minute = String.valueOf(min - ((min/60)*60));
if(hour.length() < 2){
hour = "0" + hour;
}
if(minute.length() < 2){
minute = "0" + minute;
}
str = hour + ":" + minute;
return str;
}
static void printArr(int[] arr){
for(int ai : arr){
System.out.print(ai + " ");
}
System.out.println();
}
public static String solution(int n, int t, int m, String[] timetable) {
String answer = "";
//String으로 된 크루들의 도착 시간표를 분으로 나타낸 int[] crewTimeTable로 바꾼다.
crewTimeTable = new int[timetable.length];
stringToMinute(timetable);
//버스 시간표를 만든다. int[] busTimeTable = new int[n]; -> n번 운행하므로 n개 할당.
busTimeTable = new int[n];
stringToMinute(n, t);
//crewTimeTable과 busTimeTable 비교
int min = getToBusStopTime(m);
//String으로 변환하기
answer = minuteToHourMin(min);
//printArr(busTimeTable);
//printArr(crewTimeTable);
return answer;
}
public static void main(String[] args) {
String[] timetable1 = {"08:00", "08:01", "08:02", "08:03"};
System.out.println(solution(1, 1, 5, timetable1));
String[] timetable2 = {"09:10", "09:10", "08:09","08:09","08:00"};
System.out.println(solution(2, 10, 2, timetable2));
String[] timetable3 = {"09:00", "09:00", "09:00", "09:00"};
System.out.println(solution(2, 1, 2, timetable3));
String[] timetable4 = {"00:01", "00:01", "00:01", "00:01", "00:01"};
System.out.println(solution(1, 1, 5, timetable4));
String[] timetable5 = {"23:59"};
System.out.println(solution(1, 1, 1, timetable5));
String[] timetable6 = {"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"};
System.out.println(solution(10, 60, 45, timetable6));
}
}
https://programmers.co.kr/learn/courses/30/lessons/17678#
'CS > 알고리즘 풀이' 카테고리의 다른 글
[알고리즘_풀이] 백준 1107, 리모컨 (0) | 2019.09.06 |
---|---|
[알고리즘_풀이] 카카오 코딩테스트, 실패율 Java (0) | 2019.08.30 |
[알고리즘_풀이] 카카오코딩테스트, 프렌즈 4블록(java) (0) | 2019.08.28 |
[알고리즘_풀이] 카카오 예선, 카카오프렌즈 컬러링북 (0) | 2019.08.27 |
[알고리즘_풀이] 백준 11724, 연결 요소의 개수 (0) | 2019.08.27 |
Comments