728x90
난이도 : Lv. 3
풀이일 : 2501212
https://school.programmers.co.kr/learn/courses/30/lessons/17678
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
아이디어
- 전체 버스 시간을 숫자로 변환해서 쉽게 비교하자
- 각 버스 시간에 버스를 타고 간 크루의 인덱스를 저장하자
- 막차에 자리가 있다면, 막차 시간에 도착하자
- 막차에 자리가 없다면 마지막 사람보다 1분 먼저 도착하자
코드
function solution(n, t, m, timetable) {
var answer = ''
var bus = 0, crew = 0, num = 0, now = 540 - t
var lastseat = true
// 크루 도착 정보 숫자 변환 및 정렬
timetable = timetable.map((time) => {
time = parseInt(time.substr(0, 2)) * 60 + parseInt(time.substr(3, 5))
return time
})
timetable.sort((a, b) => a - b)
while (bus < n) { // 각 버스에 타는 크루 살펴보기
now += t
num = 0
while (crew + num < timetable.length && num < m) {
if (timetable[crew + num] > now) { // 버스보다 늦은 사람 발견
break
}
num++
if (bus + 1 == n && num == m) { // 막차에 자리 없음
lastseat = false
}
}
crew += num
bus++
}
// 막차에 자리 있으면 막차, 아니면 제일 마지막 사람 도착 시간 1분 전
answer = lastseat ? now : timetable[crew - 1] - 1
return parseInt(answer / 60).toString().padStart(2, "0") + ":" + (answer % 60).toString().padStart(2, "0")
}
- lastseat : 막차에 자리가 있는지 확인
- timetables : 모두 숫자로 변환해 9시인 540부터 각 셔틀버스 도착시간과 비교한다. 비교를 위한 정렬 필요
- while (bus < n) : 각 버스에 타는 크루를 구해 탄 크루의 인덱스를 crew로 저장
- if (timetable[crew + num] > now) : 현재 버스 출발 시간보다 도착시간이 늦은 사람을 발견했으므로 중단 조건
- 막차면서, 탈 수 있는 사람이 다 탔으면 막차에 자리가 없다.
- 막차에 자리가 있다면 막차 시간 출력, 없다면 마지막 사람보다 1분 빨리 도착
제출 결과
느낀점
- 같은 로직인데 속도는 파이썬 < 자바스크립트 < 자바 순이어서 신기하다. 항상 자스가 제일 느렸는데 아직 익숙하지 않아서 어떻게 코드를 짜야 빨라지는지 잘 모르겠다.
- 문자와 숫자 변환, 문자열 자르기 등 자스에서 몰랐던 것들을 찾아가며 풀었다.
'알고리즘 > Lv. 3' 카테고리의 다른 글
프로그래머스 17678 셔틀버스 자바 풀이 (0) | 2025.01.20 |
---|---|
프로그래머스 17678 셔틀버스 파이썬 풀이 (0) | 2025.01.20 |
프로그래머스 12927 야근 지수 파이썬 풀이 (0) | 2025.01.20 |
프로그래머스 12907 거스름돈 자바 풀이 (1) | 2024.12.27 |
프로그래머스 12907 거스름돈 자바스크립트 풀이 (0) | 2024.12.27 |