[프로그래머스] 기능 개발

MinTa·2021년 7월 24일
0

알고리즘

목록 보기
3/3

문제

아이디어

  1. 기능개발을 완료하는데 걸릴 일수를 저장할 리스트(daysCnt)를 만들어 그 안에서 작업해야겠다고 생각했다.

  2. 문제에서 우선순위가 뒤쪽에 있는 기능이 먼저 개발되더라도 우선순위가 앞선 기능이 개발되고나서야 그때 우선순위가 앞선 기능과 함께 배포된다는 점에서 "자신의 일수보다 큰 일수가 나올때까지 작은 일수가 걸리는 기능들을 세면 된다" 라는 결론에 도달했다

  3. 까다로웠던 부분은 센 이후에 이미 갯수에 포함된 기능들은 넘어가야 한다는 점이였다. 고민 끝에 endPoint라는 변수를 두어 포함되는 기능들의 index를 넣어주었다. 그 이후 첫번째 for문의 i에서 endPoint가 존재하고 endPoint의 인덱스를 지나지 않았다면 continue를 통해 넘어가주었다.

  4. 각각의 for문에서 마지막에 해당될 경우 개수를 넣어주지 못해 if문을 통해 마지막 인덱스일 때의 개수 또한 넣어주었다.

정답 풀이

def solution(progresses, speeds):
    answer = []
    
    daysCnt = []
    for i in range(len(progresses)):
        left = 100-progresses[i]
        
        cnt = 0
        if left % speeds[i]:
            cnt = left // speeds[i] + 1
        else:
            cnt = left // speeds[i]
        
        daysCnt.append(cnt)
    
    endPoint = 0
    for i in range(len(daysCnt)):
        if endPoint and i <= endPoint:
            continue
        
        tmp = 1
        
        # daysCnt
        if i == len(daysCnt)-1:
            answer.append(tmp)
            
        for j in range(i+1,len(daysCnt)):
            if daysCnt[i] < daysCnt[j]:
                answer.append(tmp)
                break
            else:
                tmp += 1
                endPoint = j
            
            
            if j == len(daysCnt)-1:
                answer.append(tmp)
                
    return answer

이미 포함된 수들을 넘기는 방법을 떠올리는데 생각보다 오래걸렸다. 다음에 비슷한 방법을 써야한다면 end-point 변수를 두는 것을 생각해보자

profile
지(치지않고)꾸(준히)열(심히)

0개의 댓글