일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 서블릿
- 우아한테크코스
- 자바
- 프리코스
- 미션
- Paging
- mock
- JUnit5
- 트랜잭션
- 레벨2
- 스프링 부트
- 우아한세미나
- CircuitBreaker
- JPA
- 스프링부트
- yml
- MSA
- AWS
- 프로그래머스
- 의존성
- 세션
- HTTP
- 우테코
- Docker
- Level2
- 백준
- REDIS
- 코드리뷰
- AOP
- Spring Batch
Archives
- Today
- Total
늘
2018 KAKAO BLIND RECRUITMENT [추석트래픽] 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/17676
코딩테스트 연습 - [1차] 추석 트래픽
입력: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1
programmers.co.kr
생각보다 단순해서 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