1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/155651
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 접근 방식
해당 문제의 시간을 시, 분 따로 나눠서 범위를 정하면 문제가 꽤나 복잡해진다.
그래서 (시간 * 60분 + 분)으로 전체시간을 분으로 변환 해주고 입실~퇴실 범위에 값을 누적해주면된다.
다만 매번 입실~퇴실 시간의 범위에 반복문을 돌려 값을 누적하기엔 시간복잡도가 증가한다.
입실 시간엔 +1, 퇴실 시간엔 -1의 값을 대입해 준 뒤 배열을 누적합 해주고 최대값을 반환하면 된다.
3. 구현
class Solution {
public int solution(String[][] book_time) {
int answer = 1;
int[] timeCheck = new int[24*60+10];
for (int i=0; i<book_time.length; i++) {
int start = convertTime(book_time[i][0].split(":"));
int end = convertTime(book_time[i][1].split(":"));
timeCheck[start] += 1;
timeCheck[end+10] -= 1;
}
for (int i=1; i<timeCheck.length; i++) {
timeCheck[i] += timeCheck[i-1];
if (answer < timeCheck[i]) {
answer = timeCheck[i];
}
}
return answer;
}
public int convertTime(String[] time) {
int hour = Integer.parseInt(time[0]);
int min = Integer.parseInt(time[1]);
return (hour * 60) + min;
}
}
4. 정리
시간 관련 문제에선 시간을 분으로 변환해주는 것이 문제 풀기가 상대적으로 편하다. 앞으론 주의하자. 또 누적합 방식 말고 시간순으로 정렬을 하여 푸는 방법도 있으니 시간있을 때 다른 코드도 유심히 보자.
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 시소짝꿍 (0) | 2023.03.16 |
---|---|
프로그래머스 - 숫자 변환하기 (0) | 2023.03.15 |
프로그래머스 - 뒤에 있는 큰 수 찾기 (0) | 2023.03.14 |
프로그래머스 - 무인도 여행 (0) | 2023.02.28 |
프로그래머스 카드뭉치 자바 (0) | 2023.02.16 |