문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/155651

제한 사항

입출력 예

풀이
import java.util.HashMap;
import java.util.Arrays;
class Solution {
public int solution(String[][] book_time) {
HashMap<Integer, Integer> roomMap = new HashMap<>();
Arrays.sort(book_time,
(arr1, arr2) ->
Integer.parseInt(arr1[0].replaceFirst(":", ""))
- Integer.parseInt(arr2[0].replaceFirst(":", ""))
);
for (String[] time : book_time) {
int checkInTime = Integer.parseInt(time[0].replaceFirst(":", ""));
int checkOutTime = Integer.parseInt(time[1].replaceFirst(":", ""));
for (int i = 0; i < roomMap.size() + 1; i++) {
int prevTime = roomMap.getOrDefault(i, -1);
if (prevTime <= checkInTime) {
roomMap.put(i, (checkOutTime % 100 >= 50) ? checkOutTime + 50 : checkOutTime + 10);
break;
}
}
}
return roomMap.size();
}
}
후기
오랜만에 코딩테스트 문제를 풀어보았다. 이번 문제는 크게 어려운 부분은 없었지만 시간 처리를 잘 생각해서 해야 한다. 퇴실 후 10분 동안 청소를 하는데 나는 시간을 15:34면 1534인 int로 바꿔서 처리했기 때문에 시간이 넘어가는 부분을 처리해주어야 한다. 예를 들어 17:53이면 10을 더하면 17:63인데, 이건 잘못된 처리이므로 여기서 10을 더하는 것이 아니라 50을 더해서 1803으로 만들어 준다. 이 부분만 생각해서 풀면 된다.
그리고 중간에 문자열을 숫자로 바꾸는 처리를 하지 않고 아예 처음부터 스트림을 사용하든 해서 정렬과 변환을 같이 해줄 수도 있다.
'코딩테스트 (프로그래머스) > Java' 카테고리의 다른 글
| [프로그래머스][Java][Lv. 2] 무인도 여행 (0) | 2024.07.18 |
|---|---|
| [프로그래머스][Java][Lv. 2] 혼자서 하는 틱택토 (0) | 2024.07.16 |
| [프로그래머스][Java][Lv. 0] 수열과 구간 쿼리 2 (0) | 2024.03.03 |
| [프로그래머스][Java][Lv. 0] 무작위로 K개의 수 뽑기 (0) | 2024.02.22 |
| [프로그래머스][Java][Lv. 0] 정사각형으로 만들기 (0) | 2024.02.16 |