본문 바로가기
Algorithm/etc

[파이썬] 프로그래머스 : 추석 트래픽 (Lv.3)

by 베짱이28호 2023. 8. 28.

[파이썬] 프로그래머스 : 추석 트래픽 (Lv.3)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


풀이

0.방향성 생각

  • 정렬 (근데 이미 정렬돼있음)
  • 이전에 풀었던 요격하기. 단속카메라 문제랑은 다르게 특정 시점이 아니라 구간 최대값이다.

1. 문자열 파싱

def solution(lines):
    
    info = []
    for line in lines:
        _,now,spend = line.split()
        h,m,s = map(float,now.split(':'))     
        end = int((h*3600+m*60+s)*1000)
        start = int(end-float(spend[:-1])*1000+1)
        info.append((start,end))
  • info에 task마다 시작, 끝시간을 넣는다.
  • 소수점 연산하니까 부동소수점 오류나서 소수점 없애고 int로 바꿈

2. 탐색

    answer = 0
    for i in range(len(lines)):
        count = 0
        now = info[i][1]
        for j in range(i,len(lines)):
            if now + 1000 > info[j][0]:
                count += 1
        answer = max(answer,count)

    return answer
  • 현재 task의 끝 시간부터 +1초 (+1000)까지 몇 개 있는지 센다.

전체코드

def solution(lines):
    
    info = []
    for line in lines:
        _,now,spend = line.split()
        h,m,s = map(float,now.split(':'))     
        end = int((h*3600+m*60+s)*1000)
        start = int(end-float(spend[:-1])*1000+1)
        info.append((start,end))
    
    answer = 0
    for i in range(len(lines)):
        count = 0
        now = info[i][1]
        for j in range(i,len(lines)):
            if now + 1000 > info[j][0]:
                count += 1
        answer = max(answer,count)

    return answer

코멘트

N = 2000이라 그냥 초단위로 바꾸고 브루트포스해도 맞을듯

옛날이랑 지금문제랑 난이도차이 너무 심한듯

댓글