본문 바로가기

알고리즘 문제풀이

[알고리즘] 동영상 재생기, 퍼즐 게임 챌린지, 충돌위험 찾기

동영상 재생기

문자열 앞에 "0"값을 채우는 함수는 string_number.zfill(n)

0이 아니라 다른 것으로 채우고 싶다면 string_number.rjust(n, "a")

format도 있지만 외우지는 말자

 

내 풀이

def solution(video_len, pos, op_start, op_end, commands):
    
    def trim(val):
        mn, sc = val.split(':')
        return int(mn)*60 + int(sc)
    
    video_len = trim(video_len)
    pos = trim(pos)
    op_start = trim(op_start)
    op_end = trim(op_end)
    
    if op_start <= pos < op_end: pos = op_end
    
    for com in commands:
        if com == 'prev': pos = max(pos-10, 0)
        elif com == 'next': pos = min(pos+10, video_len)
        
        if op_start <= pos < op_end: pos = op_end
            
    return str(pos//60).zfill(2) + ':' + str(pos%60).zfill(2)

 

 

퍼즐 게임 챌린지

이분탐색이 주요했던 문제. 보자마자 눈치는 챘고, 모든 숙련도는 양의 정수라고 강조한 걸 보고 확실해졌다.

 

내 풀이

def solution(diffs, times, limit):
    
    def valid_time(level):
        time = 0

        for i in range(len(diffs)):
            if diffs[i] > level:
                if i: time += (diffs[i]-level) * times[i-1]
                time += (diffs[i]-level) * times[i]
            time += times[i]
    
        return time <= limit
    
    i, j = 1, 100000
    
    while i < j:
        mid = (i+j)//2
        if valid_time(mid): j = mid
        else: i = mid+1
    
    return i

 

 

충돌위험 찾기

12/23 에 도전했으나, 1시간여 풀고 포기,

그러나 답안 안 보고 12/24에 재도전.