-
[Programmers] 호텔 대실 / ⭕Algorithm/Programmers 2024. 7. 15. 17:45
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 제출 코드 (57분 32초 / Greedy)
import java.util.*; class Solution { public int solution(String[][] book_time) { int answer = 0; PriorityQueue<String> pq = new PriorityQueue<>((o1, o2) -> { String[] s1 = o1.split(":"); String[] s2 = o2.split(":"); if(Integer.parseInt(s1[0]) != Integer.parseInt(s2[0])) { return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]); } else { return Integer.parseInt(s1[1]) - Integer.parseInt(s2[1]); } }); Arrays.sort(book_time, (o1, o2) -> { String[] s1 = o1[0].split(":"); String[] s2 = o2[0].split(":"); if(Integer.parseInt(s1[0]) != Integer.parseInt(s2[0])) { return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]); } else { return Integer.parseInt(s1[1]) - Integer.parseInt(s2[1]); } }); for(int i = 0; i < book_time.length; i++) { if(pq.isEmpty()) { pq.offer(book_time[i][1]); } else { if(calc_time(pq.peek(), book_time[i][0])) { pq.poll(); } pq.offer(book_time[i][1]); } } answer = pq.size(); return answer; } static boolean calc_time(String s1, String s2) { String[] prev = s1.split(":"); String[] curr = s2.split(":"); int prev_time = Integer.parseInt(prev[0])*60 + Integer.parseInt(prev[1]); int curr_time = Integer.parseInt(curr[0])*60 + Integer.parseInt(curr[1]); if(prev_time + 10 <= curr_time) { return true; } return false; } }
2. 구현 로직
- 입실 시간을 기준으로 book_time 배열을 정렬
- 우선순위 큐를 사용하여 사용중인 방중에 가장 빠른 퇴실 시간을 검색
- 현재 순서의 시작 시간과 퇴실 시간을 비교하여 퇴실 시간이 더 빠른 경우 우선순위 큐에서 poll()
- 위 과정을 반복하고 마지막에 우선순위 큐에 남아있는 size()를 return하여 정답 추출
3. 유의할 점
- 퇴실 시간과 현재 시작 시간을 비교할 때, 분으로 변환하지 않고 했는데 일부 테스트 케이스에서 오류가 났다.
- 생각을 해봤는데 +10분을 해주면서 시간이 바뀌는 경우가 있는데 이것을 고려해서 풀어야 한다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 숫자 변환하기 / ⭕ (0) 2024.07.17 [Programmers] 무인도 여행 / ⭕ (4) 2024.07.16 [Programmers] 혼자서 하는 틱택토 / ⭕ (0) 2024.07.11 [Programmers] 미로 탈출 / ⭕ (1) 2024.07.10 [Programmers] 리코쳇 로봇 / ⭕ (0) 2024.07.09