프로그래머스 고득점kit 스택 - 기능개발(level2)

j_wisdom_h·2022년 10월 1일
0

CodingTest

목록 보기
3/58

프로그래머스 고득점kit

스택 - 기능개발(level2)


  1. 문제설명


  1. 입출력 예제

즉, (100 - progresse) / speed 는 작업기간 term(t)
이전 작업기간(t1)이 이후 작업(t2)보다 걸리는 시간이 길면 기다렸다가 이전작업(t1)이 마치는 날에 같이 배포된다. 이때 max를 업데이트하는 과정이 중요하다.


의식의 흐름대로 작성한 나의 코드

def solution(progresses, speeds):
    terms=[]
    result =[]
    # 작업기간 구하기
    for p,s in zip(progresses,speeds):
      terms.append(math.ceil((100 - p) / s))
    #  
    count = 0
    max = terms[0]
    for term in terms:
      if max >= term:
         count +=1
      else:
        result.append(count);
        max = term
        count = 1 
    result.append(count)    
    return result


이런 풀이 방법도 있어요.

😆😆😆개인적으로 제 스타일인 풀이입니다.😆😆😆
map, lambda 는 오랜만에 보는거라 다시 공부해야겠어요

def solution(progresses, speeds):
    daysLeft = list(map(lambda x: (ceil((100 - progresses[x]) / speeds[x])), range(len(progresses))))
    count = 1
    retList = []
    for i in range(len(daysLeft)):
        try:
            if daysLeft[i] < daysLeft[i + 1]:
                retList.append(count)
                count = 1
            else:
                daysLeft[i + 1] = daysLeft[i]
                count += 1
        except IndexError:
            retList.append(count)
    return retList


그리고 갓벽한 풀이방법도 있어요. 나도 이런 코드 짜고 싶다...😂😂😂

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]
profile
뚜잇뚜잇 FE개발자

0개의 댓글