본문 바로가기
*Algorithm/Programmers_Level2

[programmers] 프로그래머스 Level2 기능개발(파이썬 Python)

by codinguser 2021. 7. 20.

프로그래머스
(주)그렙

 

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

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제

 

progress[i] + speed[i] x day >= 100

day >= 100 - progress[i] / speed[i]

를 바탕으로 문제를 해결해나가면 된다.

 

 

 

 

1) 문제


프로그래머스 level2 기능개발

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

 

 

 

 

 

2) 코드


 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def roundup(a, b) :
    if (a % b) == 0 :
        return int(a / b)
    
    return int(a / b) + 1
 
def solution(progresses, speeds):
    submit_day = []
    
    for i in range(0len(progresses)) :
        left = 100 - progresses[i]
        day = roundup(left, speeds[i])
        
        submit_day.append(day)
    
    answer = []
    
    init_day = -1
    cur_sum_summit_day = 0
        
    for i in range(0len(submit_day)):
        if (init_day == -1) :
            init_day = submit_day[i]
            cur_sum_summit_day = 1
            
        elif (init_day >= submit_day[i]):
            cur_sum_summit_day += 1
                
        else :
            init_day = submit_day[i]
            answer.append(cur_sum_summit_day)
            cur_sum_summit_day = 1
            
    
    answer.append(cur_sum_summit_day)
    
    return answer
cs

 

 

 

3) 풀이 과정


(1)

입출력의 예시를 통해 return [2,1]이 어떻게 나와있는지 우선 확인을 해야 한다.

 

progresses

[93, 30, 55]

 

speeds

[1, 30, 5]

 

위 배열 타입의 관계로 볼때

 

93 + 1x > = 100

x >= 7

x = 7

 

30 + 30x >= 100

30x>=70

x>=2

But

x = 3

 

55 + 5x >= 100

5x >= 45

x >= 9

 

즉, 나누어 떨어질때에는 그냥 값을 가지지만

나누어 떨어지지 않을때에는 +1을 올림을 해줘야 한다.

 

 

 

(2)

[7,3,9] - > [2, 1]

로 가는 것을 알아야 한다.

 

문제에서 보면, "뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발 될 수 있고, 이 때 뒤에 있는 기능은 앞에 있는 기능이 배포 될 때 함께 배포된다." 라는 문구가 보인다.

 

왼쪽->오른쪽으로 [7,3,9]

 

즉 7,3이 묶여 2로 되며

9는 따로 1로 되는 것이다.

 

 

 

(3)

summit_day = []의 경우는 7,3,9를 담기 위한 배열이다.

 

init_day = -1 로 설정한건 다음과 같다.

날짜는 절대 음수가 나올 수 없기 때문에, 그 다음에 오는 수들과 비교 했을 때 어떠한 문제가 되지 않는다. 그렇기에 초기 값으로 -1을 지정했다. 맨 처음 딱 한번만 체크하기 위한 용도이다.

 

 

 

 

아래의 테이블을 보면 확실히 이해가 갈거라 생각한다.

  초기 summit_day 종료
  7 3 9  
summit_day -1 7 7 9 9
cur_sum_summit_day 0 1 2 1 1
answer [] [] [] [2] [2,1]

 

 

for i in range(0, len(day_to_summit):

    if()    # 7에 해당 하는 부분

 

    elif()   # 3에 해당 하는 부분

 

    else    # 9에 해당 하는 부분

 

 

 

 

 

 

 

 

 

 

 

 

4) 정리 노트


X

댓글