코린이 탈출기
[2018 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 셔틀버스 본문
소요시간 : 2시간
시간을 어떻게 나타낼 것인지 생각하는 데에서 오래걸렸다
<문제 풀이 Logic>
- timeProcess() 함수로 "09:00" 형태의 string을 540(minute)으로 변환한다.
- processAnswer() 함수로 숫자형태의 시간을 다시 "xx:xx" 형태로 변환한다.
1. n*m 크기의 2차원 배열 crew_time을 생성한다.
2. new_timetable에 timetable을 숫자형태로 바꿔서(timeProcess 사용) 저장하고 오름차순으로 정렬한다.
3. busTime은 버스도착시간을 key로 가지고, idx를 value로 가진다. ex) busTime["540"] = 0
4. busTime의 key에 접근할 수 있는 busTime_key 배열을 생성한다.
5. new_timetable을 순회하며 버스 도착 시간에 맞춰서 crew_time에 원소들을 넣어준다.
* 두 번째 testcase 적용 시
busTime_key: ["540", "550"] //09:00, 09:10
busTime: [540: 0, 550: 1]
new_timetable: [480, 549, 550]
crew_time: [[480],
[549, 550]]
6. 마지막 버스의 마지막 승객이 m-1번째라면 (즉, 더 이상 승객이 탑승할 수 없는 상태), 콘의 탑승시각은 (그 승객의 탑승시간 -1) 이다.
마지막 버스에 아직 탈 자리가 남아있다면 콘의 탑승시각은 마지막 버스의 출발시간이다.
-전체 코드-
<!DOCTYPE html>
<body>
<script>
function timeProcess(arr) {
var hour = Number(arr[0]);
var minute = Number(arr[1]);
var newTime = hour * 60 + minute;
return newTime;
}
function processAnswer(time)
{
var hour = parseInt(time/60);
var minute = time%60;
var str_hour = "00" + hour;
var str_minute = "00" + minute;
var str = str_hour.slice(-2) + ":" + str_minute.slice(-2);
console.log(str);
return str;
}
function solution(n, t, m, timetable) {
var answer = '';
let busTime = [];
let startTime = 9 * 60;
let crew_time = new Array(n);
for (let i = 0; i < crew_time.length; i++) {
crew_time[i] = [];
}
for (let i = 0; i < n; i++) {
busTime[startTime] = i;
startTime += t;
}
console.log(busTime);
console.log(crew_time);
let new_timetable = [];
timetable.forEach(element => {
console.log(element)
let myTime = element.split(":");
new_timetable.push(timeProcess(myTime));
});
new_timetable.sort((a, b) => a - b);
console.log(new_timetable);
let busTime_idx = 0;
let busTime_key = Object.keys(busTime);
let crew_idx = 0;
loop:
for (let i = 0; i < new_timetable.length; i++) {
let e = new_timetable[i];
if (crew_idx == m) {
crew_idx = 0;
busTime_idx++;
if (busTime_idx == busTime_key.length)
break loop;
}
if (e > busTime_key[busTime_idx]) {
while (e > busTime_key[busTime_idx]) {
crew_idx = 0;
busTime_idx++;
if (busTime_idx == busTime_key.length)
break loop;
}
}
console.log(busTime[busTime_key[busTime_idx]]);
crew_time[busTime[busTime_key[busTime_idx]]].push(e);
crew_idx++;
}
console.log(crew_time);
let conTime;
console.log(m);
console.log(busTime_key);
let flag = 0;
if(crew_time[crew_time.length-1].length < m)
conTime = busTime_key[busTime_key.length-1];
else
conTime = crew_time[crew_time.length-1][m-1] -1;
console.log(conTime);
answer = processAnswer(conTime);
return answer;
}
solution(1, 1, 5, ["08:00", "08:01", "08:02", "08:03"])
solution(2, 10, 2, ["09:10", "09:09", "08:00"])
solution(2, 1, 2, ["09:00", "09:00", "09:00", "09:00"])
solution(1, 1, 5, ["00:01", "00:01", "00:01", "00:01", "00:01"])
solution(1, 1, 1, ["23:59"]);
solution(10, 60, 45, ["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"])
solution(2, 2, 3, ["09:00", "09:11", "02:11", "02:12", "02:13", "02:14"]);
</script>
</body>
'문제 풀이' 카테고리의 다른 글
[백준 12015][Python] 가장 긴 증가하는 부분 수열 (0) | 2020.11.06 |
---|---|
[2018 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 뉴스 클러스터링 (0) | 2020.09.11 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 길 찾기 게임 (0) | 2020.09.08 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 무지의 먹방라이브 (0) | 2020.09.07 |
[2019 KAKAO BLIND RECRUITMENT][JAVASCRIPT] 후보키 (0) | 2020.09.06 |