늘
2018 KAKAO BLIND RECRUITMENT [추석트래픽] 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/17676
생각보다 단순해서 level3인줄 몰랐다. 하지만 문자열을 나누고 파싱하고 비교하는 등 번거롭고 시간잡아먹는게 많아서 실전이었으면 멘탈 좀 흔들렸을것 같다.
말을 들으면 잘 이해가 안갔다. 하지만 문제에 친절히 그림까지 있어서 그림을 보고 이해했다.
해결 방법은 타임라인의 시작부분과, 끝부분을 기준으로 해서 1초사이에 몇개의 다른 로그들이 더 있는지 카운트해주면 된다. 아래는 소스코드이다.
import java.util.*;
class Solution {
public int solution(String[] lines) {
int answer = 0;
List<Double> start = new ArrayList<>();
List<Double> end = new ArrayList<>();
List<Integer> total = new ArrayList<>();
for(int i=0; i<lines.length; ++i){
String[] log = lines[i].split(" ");
String endDate = log[1];
String times = log[2];
int target = times.indexOf("s");
Double time = Double.parseDouble(times.substring(0,target));//걸린 시간
String[] nano = endDate.split(":");
Double sec = Double.parseDouble(nano[0])*3600;
sec+=Double.parseDouble(nano[1])*60;
sec+=Double.parseDouble(nano[2]);//초단위로 변환
Double startDate = sec-(time)+0.001;
start.add(startDate);
//endDate 초단위 변환->sec
end.add(sec);
}
if(lines.length == 1){
return 1;
}
for(int i=0; i<start.size(); ++i){
int cnt=1;
Double st = start.get(i);
Double ed = end.get(i);
for(int j=i+1; j<start.size(); ++j){
if (Math.abs(ed-start.get(j)) < 1 || Math.abs(ed-end.get(j)) < 1
|| Math.abs(st-start.get(j)) < 1 || Math.abs(st-end.get(j)) < 1
|| (st <= start.get(j) && end.get(j) <= ed)
|| (start.get(j) <= st && ed <= end.get(j))
) {
cnt++;
}
}
answer = Math.max(answer,cnt);
}
return answer;
}
}
728x90
'알고리즘_프로그래머스 > KAKAO' 카테고리의 다른 글
[프로그래머스] C/C++ [2020 KAKAO BLIND RECRUITMENT] 문자열 압축 (0) | 2021.10.26 |
---|---|
c/c++ 2018 카카오 블라인드 [3차] n진수 게임 (0) | 2021.08.24 |
C/C++ 2018 KAKAO BLIND RECRUITMENT [3차] 파일명 정렬 (0) | 2021.08.06 |
2019 KAKAO BLIND RECRUITMENT_실패율 (3) | 2021.03.18 |
Level.2_괄호 변환 (0) | 2021.03.07 |
Comments