원본 : https://school.programmers.co.kr/learn/courses/30/lessons/17676
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
import java.text.*;
import java.util.*;
class Solution {
public int solution(String[] lines) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss.SSS");
List<Date> startDateList = new ArrayList<>();
List<Date> endDateList = new ArrayList<>();
for (String line : lines) {
StringTokenizer st = new StringTokenizer(line, " ");
st.nextToken();
Date endDate;
try {
endDate = simpleDateFormat.parse(st.nextToken());
} catch (ParseException e) {
throw new RuntimeException(e);
}
String consumeSecStr = st.nextToken();
int consumeMilliSec = -1 * (int)(Double.parseDouble(consumeSecStr.substring(0, consumeSecStr.length() - 1)) * 1000) + 1;
Calendar calendar = Calendar.getInstance();
calendar.setTime(endDate);
calendar.add(Calendar.MILLISECOND, consumeMilliSec);
Date startDate = calendar.getTime();
startDateList.add(startDate);
endDateList.add(endDate);
}
int resultCnt = 0;
for (Date rangeStartDate : startDateList) {
long rangeStartTime = rangeStartDate.getTime();
long rangeEndTime = rangeStartTime + 999;
int cnt = getCnt(lines, startDateList, endDateList, rangeStartTime, rangeEndTime);
resultCnt = Math.max(resultCnt, cnt);
rangeEndTime = rangeStartDate.getTime();
rangeStartTime = rangeEndTime - 999;
cnt = getCnt(lines, startDateList, endDateList, rangeStartTime, rangeEndTime);
resultCnt = Math.max(resultCnt, cnt);
}
for (Date rangeEndDate : endDateList) {
long rangeEndTime = rangeEndDate.getTime();
long rangeStartTime = rangeEndTime - 999;
int cnt = getCnt(lines, startDateList, endDateList, rangeStartTime, rangeEndTime);
resultCnt = Math.max(resultCnt, cnt);
rangeStartTime = rangeEndDate.getTime();
rangeEndTime = rangeStartTime + 999;
cnt = getCnt(lines, startDateList, endDateList, rangeStartTime, rangeEndTime);
resultCnt = Math.max(resultCnt, cnt);
}
return resultCnt;
}
private int getCnt(String[] lines, List<Date> startDateList, List<Date> endDateList, long rangeStartTime, long rangeEndTime) {
int cnt = lines.length;
for (int i = 0; i < lines.length; i++) {
long startTime = startDateList.get(i).getTime();
long endTime = endDateList.get(i).getTime();
if (endTime < rangeStartTime || startTime > rangeEndTime) {
cnt--;
}
}
return cnt;
}
}
입국심사 (이분탐색) (0) | 2022.08.03 |
---|---|
N으로 표현 (동적계획법(Dynamic Programming)) (0) | 2022.08.03 |
양궁대회 (2022 KAKAO BLIND RECRUITMENT) (0) | 2022.08.02 |
N개의 최소공배수 (연습문제) (0) | 2022.08.02 |
JadenCase 문자열 만들기 (연습문제) (0) | 2022.08.02 |
댓글 영역