본문 바로가기

프로그래머스

2018 KAKAO BLIND RECRUITMENT[1차] 추석 트래픽

반응형
def solution(lines):
    answer = 0
    
    arr = []
    
    for i in lines:
        tmp = i.split(" ")
        print(tmp)
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        print("S :" , start_time)
        print("T_sec : ", T_sec*1000)
        print("E :" , end_time)
        
        arr.append((end_time,-1))
        arr.append((start_time,1))
    
    arr = sorted(arr)
    print(arr)
    
    count = 0
    
    for i in range(len(arr)):
        
        
        # 연다
        if i[1] == 1:
            count += 1
        else:
            
        
        
        
        
        
        
    
    
    
    
    return answer

59%의 정확도

def solution(lines):
    answer = 0
    
    if len(lines) == 1:
        return 1
    
    arr = []
    
    for i in lines:
        tmp = i.split(" ")
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        
        arr.append((end_time,-1))
        arr.append((start_time,1))
    
    arr = sorted(arr)
    
    
    
    count = 0
    cnt_arr = []
    
    intersect = 0
    num_of_bar = 0
    
    print(arr)
                
    for i in range(len(arr)):
        if arr[i][0] < 0:
            continue
        if arr[i][1] == -1:
            num_of_bar -= 1
            count += 1
        else:
            num_of_bar+= 1
        duration_time = arr[i][0] + 999
        for j in range(i,len(arr)):
            if arr[j][0] > duration_time:
                #print(arr[j])
                break
            if arr[j][0] <= duration_time and arr[j][1] == 1:
                #print(arr[j])
                count += 1
        count += num_of_bar        
        cnt_arr.append(count)
        count = 0
            
    print(cnt_arr)
        
        
    if max(cnt_arr) != 1:
        return max(cnt_arr)-1
    else:
        return max(cnt_arr)
        
        
        
        
    
    
    
    
    return answer

63%의 정확도

def solution(lines):
    answer = 0
    
    if len(lines) == 1:
        return 1
    
    arr = []
    
    len_num = 0
    
    for i in lines:
        tmp = i.split(" ")
        T_sec = float(tmp[2][:-1])
        end_time = int(tmp[1][:2])*3600000 + int(tmp[1][3:5])*60000 + int(tmp[1][6:8])*1000 + int(tmp[1][-3:])
        start_time = end_time - T_sec*1000 + 1
        
        arr.append((end_time,-1,len_num))
        arr.append((start_time,1,len_num))
        len_num += 1
    
    arr = sorted(arr)
    
    count = 0
    cnt_arr = []
    arr2 = [0]*len_num
    for i in range(len(arr)):
        
        count += sum(arr2)
        
        if arr[i][1] == 1:
            arr2[arr[i][2]] = 1
        else:
            arr2[arr[i][2]] = 0
        
        if arr[i][0] < 0:
            continue
        
        duration_time = arr[i][0] + 999
        
        for j in range(i,len(arr)):
            if arr[j][0] > duration_time:
                break
                
            if arr[j][1] == 1:
                count += 1   
                
        cnt_arr.append(count)
        count = 0
        
        
    return max(cnt_arr)
반응형