2018 KAKAO BLIND RECRUITMENT 문제이다.
문제 풀이
1. 먼저 주어진 시간을 시작시간과 종료시간으로 적절히 연산가능하도록 변환해 준다.(저는 datetime 라이브러리를 사용하였습니다.)
2. 각 시작시간과 종료시간마다 1초의 여유를 두고 동시에 진행중인 프로세스의 개수를 센다.
자세한 풀이는 카카오 공식 풀이를 참조하세요.
* 계속 테스트케이스의 한 두개가 틀렸는데, 종료시간에 대해서만 비교를해서 그랬습니다. 시작시간과 종료시간 모두 동시에 수행중인 프로세스의 수가 바뀔 수 있습니다.
* 과정 2 부분을 이중포문으로 구현했으므로 시간복잡도는 O(n^2)이 됩니다.
Python Code
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
29
|
import datetime
from collections import deque
def solution(lines):
answer = 0
traffics = []
for l in lines:
date, time, t = l.split()
tmp_date = list(map(int,date.split("-")))
tmp_time = time.split(":")
sec, msec = tmp_time[2].split('.')
end = datetime.datetime(tmp_date[0],tmp_date[1],tmp_date[2],int(tmp_time[0]),int(tmp_time[1]),int(sec),int(float("0."+msec)*1000000))
start = end - datetime.timedelta(seconds = float(t[:-1])) + datetime.timedelta(seconds = 0.001)
traffics.append((start,end + datetime.timedelta(seconds = 1)))
#기준 시간
for start, end in traffics:
count_start = 0
count_end = 0
for s,e in traffics:
if s < start <= e :
count_start += 1
if s < end <= e :
count_end += 1
if max(count_start,count_end) > answer :
answer = max(count_start,count_end)
return answer
|
cs |
Line 8 - 16 : 주어진 시간을 datetime 라이브러리를 활용하여 연산 가능하게 변환하고 traffics 리스트에 넣어줍니다.
Line 18 - 27 : 첫 for문의 start와 end가 기준시간으로 해당 시간의 1초 여유 안에 있는 traffics의 요소의 개수를 세어줍니다.
문제 링크
코딩테스트 연습 - [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-15 21:00:00.748
programmers.co.kr
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 두 개 뽑아서 더하기 (0) | 2020.10.16 |
---|---|
프로그래머스 '2020 카카오 인턴십' 키패드 누르기 (0) | 2020.10.09 |
프로그래머스 SQL 오랜 기간 보호한 동물(1) (0) | 2020.05.23 |
프로그래머스 SQL 보호소에서 중성화한 동물 (0) | 2020.04.17 |
프로그래머스 SQL 있었는데요 없었습니다 (0) | 2020.04.17 |