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
- 클린코드
- Design Pattern
- 자바의 정석
- 2166번
- 10830번
- Dxerr.h
- programmers
- 코딩테스트
- 17장
- BOJ
- 1043번
- Adapater Pattern
- java
- 9장
- Design Patterns
- DxTrace
- 11286번
- 1300번
- 11758번
- Spring
- 2156번
- springboot
- 백준
- 2206번
- 프로그래머스
- 코딩 테스트
- java의 정석
- 가장 긴 증가하는 부분 수열2
- SerialDate 리펙터링
- 냄새와 휴리스틱
Archives
- Today
- Total
Don't give up!
[프로그래머스] 셔틀버스 (java) 본문
코딩테스트 연습 - [1차] 셔틀버스 | 프로그래머스 (programmers.co.kr)
어떻게 생각하고 문제를 풀었는가?
주어진 타임 테이블로부터 크루들을 셔틀에 배분하는데 있어 필요한 조건은 다음과 같습니다.
1. 크루가 줄을 선 시간이 셔틀의 도착시간보다 늦지 않았는가?
2. 셔틀의 자리가 남아있는가?
1의 조건을 만족하더라도 2의 조건을 만족하지 않는 경우 다음 셔틀에 탑승해야 하므로 크루의 인덱스는 셔틀에 탑승하였을 경우에만 증가하도록 설정해야 합니다.
마지막 셔틀에 크루를 배분한 후 자리가 남아있다면 정답은 셔틀 시간과 동일하게, 그렇지 않다면 마지막 크루의 시간보다 1분 빠른 시간이 정답이 되도록 한다면 문제를 해결할 수 있다고 생각하였습니다.
코드
import java.util.*;
class Solution {
final int START_TIME = 540;
public String solution(int n, int t, int m, String[] timetable) {
Arrays.sort(timetable);
int[] mintable = new int[timetable.length];
mintable = Arrays.stream(timetable).mapToInt(time -> convertTimeToMin(time)).toArray();
int shuttle = START_TIME, index = 0, con = 0;
for(int i=0; i<n; i++){
int remain = m;
for(int j=index; j<mintable.length; j++){
if(mintable[j]<=shuttle){
index++;
remain--;
if(remain==0) break;
}
}
if(i==n-1) con = remain>0 ? shuttle : mintable[index-1]-1;
shuttle += t;
}
return convertMinToTime(con);
}
int convertTimeToMin(String time){
return Integer.parseInt(time.substring(0,2))*60+Integer.parseInt(time.substring(3));
}
String convertMinToTime(int min){
return String.format("%02d:%02d",min/60,min%60);
}
}
두 개의 for문을 사용하여 문제를 해결하는 코드입니다.
주어지는 타임 테이블은 String입니다.
각 셔틀의 시간과 비교가 쉽도록 각 시간을 분단위로 변환하여 int 배열 mintable에 저장하여 시간을 비교하였습니다.
주의할 점은 주어지는 타임 테이블은 시간 순서로 정렬되어 있지 않다는 것입니다.
시간 순으로 정렬되도록 Arrays.sort()와 같은 정렬을 수행한 후 반복문을 진행하도록 하여야 합니다.
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 기둥과 보 설치 (java) (0) | 2021.08.29 |
---|---|
[프로그래머스] 표 편집 (java) (0) | 2021.07.13 |
[프로그래머스] 추석 트래픽 (java) (0) | 2021.06.25 |