1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/17676
2. 풀이 과정
1. 밀리초로 변환
2. 끝나는 지점을 기준으로 정렬되어 있으므로 뒤에서부터 탐색
3. 끝나는 지점에서 1초뒤에 있는 걸 기준으로 count : 갯수가 변하는 지점이 끝나는 지점과 일치하므로
4. priority queue로 시작점이 큰 순으로 정리해놓고, 지금 보는 끝지점+1초보다 더 크면 poll()
import java.util.*;
class Solution {
PriorityQueue<Integer> pq;
public int getms(String[] time){
int result = Integer.parseInt(time[0])*60;//시간 => 분
result = (result + Integer.parseInt(time[1])) * 60;//분 => 초
result = (result + Integer.parseInt(time[2])) * 1000;//s => ms
result += Integer.parseInt(time[3]);
return result;
}
public int solution(String[] lines) {
pq = new PriorityQueue<>((o1, o2)->o2-o1);
int answer = 0;
int n = lines.length;
StringTokenizer st = null;
for(int i=n-1; i>=0; i--){
st = new StringTokenizer(lines[i]);
st.nextToken();//날짜
String[] endTime = st.nextToken().split("[.:]");
String[] duration = st.nextToken().split("[.s]");
int end = getms(endTime);
int start = end - Integer.parseInt(duration[0])*1000+1;
if(duration.length>1){
start -= Integer.parseInt(duration[1]);
}
//알고리즘
for(int j=0, size=pq.size(); j<size; j++){
if(end+1000>pq.peek()){
break;
}
pq.poll();
}
pq.add(start);
answer = Math.max(answer, pq.size());
}
return answer;
}
}
'코딩문제풀이 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 : 합승 택시 요금 (0) | 2022.09.24 |
---|---|
[Java] 프로그래머스 : 등산코스 정하기 (0) | 2022.09.17 |
[Java] 프로그래머스 : 피로도 (0) | 2022.09.01 |
[Java] 프로그래머스 : 전력망을 둘로 나누기 (0) | 2022.08.24 |
[Java] 프로그래머스 : 괄호 변환 (0) | 2022.08.07 |