본문 바로가기

코딩테스트 준비/프로그래머스

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

반응형

 

 

 

안녕하세요~

27년차 진로탐색꾼 조녁입니다!

1일 1코테 23일차! 고득점 Kit 에서 스택/큐 테마 문제 풀어보았습니다.

 

시간이 너무 길어져서 시간을 줄이는 연습을 했는데 그게 되려 답을 보는 안좋은 습관이 생겨버렸습니다 ㅠㅠ

계속 편하게 답을 보게되니 생각을 깊이 안하려 하는 경향이 생기는 것 같더라구요!! 

 

그래서 이제는 답을 최~대한 안보고 만약 보면 오답노트하는 심정으로 손코딩 3회 하려고 합니다!! 

(응용수학과에겐 익숙합니다 손으로 쓰는거 ..  은근 효과있어요!)

 

 

· 문제명 : 기능개발

· 사용 언어 : Python3

· 난이도 : Level2

· 문제 설명 

 

programmers.co.kr/learn/courses/30/lessons/42586

 

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

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

programmers.co.kr

 

정답 코드 

#구하고자 하는 것 : 맨앞에꺼가 종료되는 시점에 종료된 갯수 / 이후 종료된거 제거하고 다시 실행
#중요한 점: 자기 앞에꺼가 종료안되어있으면 종료안된다. -> 순서대로 따져봐야한다.
#각각 끝나기까지 걸리는 시간을 계산해준다.  

import math

def solution(progresses,speeds):
    answer = []
    
    #끝나기까지 걸리는 시간
    time = [math.ceil((100-x)/y) for x,y in zip(progresses,speeds)]
    
    while len(time)!=0:
        cnt = 1 
        c = time.pop(0) #기준을 잡아주네
        time1 = time.copy()
        
        for i in range(len(time1)):
            if c >= time[i]:
                cnt +=1
                time1.pop(0)
            else:
                break
                
        answer.append(cnt)
        time = time1
    
    return answer

 

 

 <배운점 정리 >

 

1. math 모듈 

 

-ceil() : 올림을 해준다. 여기선 2.3번 더해야하는 양이 남아도 결국 3번해야하는 거라서 올림해줬다.

 

2. while문 안에 for문을 썼다.

 

while문 안에 있는 for문을 통해, 끝나기까지 걸리는 시간을 나타내는 time array의 맨 앞에 요소가 없어질 때까지 돌렸다.

이 과정을 while문을 통해 time 안에 요소가 다 사라질때까지 반복해줬다. 

계산한 cnt (for문이 도는 동안 기능개선이 완성된 갯수) 를 answer에 넣어줬다.

 

3. for문이 오류 안나도록 time1 =  time.copy()

 

내가 제일 자주내는 오류중하나다. 만약 time으로만 진행했다면 for 문 도중 pop으로 범위 오류가 발생할 것이다.

그래서 for문이 도는 동안에 time1에서 pop을 진행하고 for문이 끝난 후에 time =time1 진행

 

https://link.coupang.com/a/rGILU

 

[한빛미디어]이것이 취업을 위한 코딩 테스트다 with 파이썬

COUPANG

www.coupang.com

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형