
문제
https://school.programmers.co.kr/learn/courses/30/lessons/155651
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
우선 생각났던건 시작시간부터, 끝시간까지 1분 단위로 카운트를 하는것이었다.
그 시간동안 몇개의 객실이 필요한지 파악하고 00:00 부터 23:59까지 모두 돈다음 가장 큰 수를 리턴하면 될거라 생각했다.
컨셉은 이렇게 잡았고, 초반에는 진짜 시간처럼 계산을 했었는데, 분기처리도 너무 까다롭고 퇴실 시간 이후 10분 처리도 까다로워서 생각을 바꿨다.
시간에 * 60 을 하고 분을 더하는 방식으로 숫자값을 만들었고, 거기에다가 9분을 더해서 끝나는 시간을 지정했다. (10분부터는 객실을 사용할 수 있다.)
이런식으로 시작시간 ~ 끝시간까지 1 단위로 map에 count를 해주었고, 마지막에 00시00분부터 23시59분 까지 순회하면서 가장 큰 값을 반환했다.
코드
import java.util.*;
class Solution {
public Map<Integer, Integer> map = new HashMap<>();
public void setMap(int s, int e){
for(int i=s; i<=e; i++){
map.put(i, map.getOrDefault(i, 0) + 1);
}
}
public int solution(String [][] times) {
int answer = 0;
for(int l=0; l<times.length; l++) {
String start = times[l][0];
String end = times[l][1];
int start_h = Integer.parseInt(start.split(":")[0]);
int start_m = Integer.parseInt(start.split(":")[1]);
int end_h = Integer.parseInt(end.split(":")[0]);
int end_m = Integer.parseInt(end.split(":")[1]);
int startTime = start_h * 60 + start_m;
int endTime = end_h * 60 + end_m + 9;
setMap(startTime, endTime);
}
for(int i=0; i<60*23+59; i++){
answer = Math.max(answer, map.getOrDefault(i, 0));
}
return answer;
}
}
후기
시간 관련 문제는 포맷에 얽매이면 힘든거 같다. 이렇게 숫자로 풀 수 있는지 고민해보자
'프로그래머스' 카테고리의 다른 글
LV2 - 미로 탈출 (0) | 2024.07.04 |
---|---|
LV2 - 무인도 여행 (Java) (0) | 2024.07.03 |
LV2 - 전력망을 둘로 나누기 (Java) (0) | 2024.07.02 |
LV2 - 마법의 엘레베이터 (Java) (0) | 2024.06.29 |
LV2 - 소수 찾기 (Java) (0) | 2024.06.27 |