-
[1차] 추석 트래픽코딩 테스트/Level 3 2020. 10. 4. 12:26반응형
[1차] 추석 트래픽
2018 KAKAO BLIND RECRUITMENT
1558명 완료https://programmers.co.kr/learn/courses/30/lessons/17676
시간을 다루는 문제는 항상 쉽지 않다 ㅠ,.ㅠ
경계를 포함하는지 마는지에 따라 결과가 달라진다.이 문제에도 약간 혼란스러웠던 것이,
마지막 0.001초를 포함하기 때문에,
시작점도 0.001초 당겨줘야 한다.그리고 그 시점에서 최대 트래픽이 아니라,
초당 최대 트래픽이라... 1초간의 트래픽을 생각해 줘야 한다.쉽게 풀기 위해 datetime 모듈을 사용했다.
문자열에서 시간을 파싱하는 것은 str'p'time이고,
시간을 문자열 포매팅으로 변환하는 것은 str'f'time이다.
시간을 더하거나 뺄 때는 timedelta를 이용한다.from datetime import datetime, timedelta def parse(line): end = datetime.strptime(line[:23], '%Y-%m-%d %H:%M:%S.%f') start = end - timedelta(seconds=float(line[24:][:-1])) + timedelta(seconds=0.001) return start, end def solution(lines): checkers = set() for i, line in enumerate(lines): lines[i] = parse(line) checkers.update(lines[i]) start_count, end_count = dict(), dict() for line_start, line_end in lines: for checker in checkers: if line_start - timedelta(seconds=1) < checker <= line_end: start_count[checker] = start_count.get(checker, 0) + 1 if line_start <= checker < line_end + timedelta(seconds=1): end_count[checker] = end_count.get(checker, 0) + 1 return max(*start_count.values(), *end_count.values())
테스트 1 〉 통과 (2.02ms, 11.3MB) 테스트 2 〉 통과 (1588.64ms, 11.8MB) 테스트 3 〉 통과 (1674.34ms, 11.8MB) 테스트 4 〉 통과 (1.77ms, 11.1MB) 테스트 5 〉 통과 (23.46ms, 11.3MB) 테스트 6 〉 통과 (22.35ms, 11.2MB) 테스트 7 〉 통과 (1614.00ms, 11.8MB) 테스트 8 〉 통과 (1590.38ms, 11.9MB) 테스트 9 〉 통과 (17.84ms, 11.2MB) 테스트 10 〉 통과 (1.94ms, 11.3MB) 테스트 11 〉 통과 (1.89ms, 11.3MB) 테스트 12 〉 통과 (1592.05ms, 11.8MB) 테스트 13 〉 통과 (24.19ms, 11.3MB) 테스트 14 〉 통과 (1.74ms, 11.3MB) 테스트 15 〉 통과 (1.75ms, 11.1MB) 테스트 16 〉 통과 (1.73ms, 11.3MB) 테스트 17 〉 통과 (1.74ms, 11.3MB) 테스트 18 〉 통과 (5766.12ms, 12.4MB) 테스트 19 〉 통과 (6689.82ms, 12.5MB) 테스트 20 〉 통과 (6311.65ms, 12.4MB) 테스트 21 〉 통과 (1.70ms, 11.3MB) 테스트 22 〉 통과 (1.70ms, 11.3MB)
결론만 이야기하자면
순간 최대 트래픽은 각 트래픽의 시작과 완료 시점 주위이다.
가장 어려웠던 건 조건문에서 넣고 빼고 하는 과정 ㅠ,.ㅠ
완성 후 생각하면 왜 어려웠나 싶지만..
푸는 중에는...덕분에 datetime 모듈은 원 없이 만져 봄..
이렇게 열심히 만져본 건 처음..더 효율적으로 풀 수 있는 방법도 있는데....
반응형