코테 노트/프로그래머스

Level 3 [1차] 추석 트래픽 <KAKAO 2018 BLIND RECRUITMENT> Python3

화요밍 2021. 8. 2. 18:45
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/17676?language=python3 

 

코딩테스트 연습 - [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

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

def check_slot(start, slots):
    end = start + 1000 - 1
    cnt = 0
    for s in slots:
        if s[0] <= end and s[1] >= start:
            cnt += 1
    return cnt

def solution(lines):
    answer = 0
    slots = []
    for l in lines:
        y, s, t = l.split(" ")
        ss = s.split(":")
        end = int(ss[0])*3600000 + int(ss[1])*60000 + int(float(ss[2])*1000)
        start = end - int(float(t.split("s")[0])*1000) + 1
        slots.append([start, end])
    for s in slots:
        answer = max(answer, check_slot(s[0], slots), check_slot(s[1], slots))
    return answer

풀이 과정

이 문제는 모의 시험 시간에 풀지 못했던 문제였다. 그래서 나중에 풀어보았다.

처음에 종이에 예제를 하나씩 적어보며 문제를 이해하고 코드로 표현하려고 시도해봤다.

그리고 작업의 시작 시간과 응답 완료 시간을 시, 분, 초로 표현한 결과를 만들었는데 시간이 2시간이나 흘렀다. 

이후에 초당 최대 처리량을 구하는데 시, 분, 초로 표현한 값을 이용하려고하다 보니 너무 복잡했다.

그래서 다른 사람 풀이를 참고해봤더니 시, 분, 초를 모두 밀리초 단위로 환산한 후 푼 것을 보고 왜 이렇게 생각을 못했지하며 아차 싶었다..

밀리초로 바꿔 푸니 복잡한 시간 계산도 필요없었다.

def check_slot(start, slots):
    end = start + 1000 - 1
    cnt = 0
    for s in slots:
        if s[0] <= end and s[1] >= start:
            cnt += 1
    return cnt

def solution(lines):
    answer = 0
    #slots[i] = i번째 요청 작업의 [시작 시간, 응답 완료 시간]
    slots = []
    for l in lines:
    	#y = "2016-09-15", s = "hh:mm:ss.sss", t = 처리 시간 s
        y, s, t = l.split(" ")
        ss = s.split(":")
        #시 = hh*3600000ms, 분 = h*60000ms, 초 = 1000ms
        end = int(ss[0])*3600000 + int(ss[1])*60000 + int(float(ss[2])*1000)
        #시작 시간 = 응답 완료시간 - 처리 시간 + 1ms
        start = end - int(float(t.split("s")[0])*1000) + 1
        slots.append([start, end])
    #작업의 시작 시간과 응답 완료 시간을 기준으로 1초 동안 처리되는 작업량을 구한다
    for s in slots:
        answer = max(answer, check_slot(s[0], slots), check_slot(s[1], slots))
    return answer
#시간복잡도 = O(n^2) 공간복잡도 = O(n)

참고

 

Level 1 [1차] 비밀지도 Python3

programmers.co.kr/learn/courses/30/lessons/17681?language=python3 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비..

hwayomingdlog.tistory.com

 

Level 1 [1차] 다트게임 Python3

programmers.co.kr/learn/courses/30/lessons/17682 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 최종 코드 GitHub github.com/hwayeon351/Programmers-Algorithms hwayeon351/Programmers-Algorithms..

hwayomingdlog.tistory.com

 

Level 2 [1차] 캐시

programmers.co.kr/learn/courses/30/lessons/17680?language=python3 코딩테스트 연습 - [1차] 캐시 3 [Jeju, Pangyo, Seoul, NewYork, LA, Jeju, Pangyo, Seoul, NewYork, LA] 50 3 [Jeju, Pangyo, Seoul, Jeju,..

hwayomingdlog.tistory.com

 

Level 3 [1차] 셔틀버스 Python3

https://programmers.co.kr/learn/courses/30/lessons/17678?language=python3 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "..

hwayomingdlog.tistory.com

 

Level 2 [1차] 뉴스 클러스터링

programmers.co.kr/learn/courses/30/lessons/17677?language=python3 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기..

hwayomingdlog.tistory.com

 

Level 2 [1차] 프랜즈 4블록

programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제

hwayomingdlog.tistory.com

  •  
728x90
반응형