[프로그래머스 / Level 2] 기능개발 (파이썬)

2022. 9. 22. 22:40·🎲 알고리즘 공부/프로그래머스

[문제]

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.

 

또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.

 

먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

 

  •  

제한 사항

  • 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.
  • 작업 진도는 100 미만의 자연수입니다.
  • 작업 속도는 100 이하의 자연수입니다.
  • 배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.

 

입출력 예시

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


🎨 풀이

💡 전체 코드

def solution(progresses, speeds):
    answer = []
    day = []
    count = 1
    
	# 1. for문을 이용해 각각 언제 배포 가능해지는 지 append.	
    for i in range(len(progresses)):
        tmp = 100 - progresses[i]
        
        if tmp % speeds[i] == 0:
            day.append(tmp//speeds[i])
        else :
            day.append(tmp//speeds[i]+1)
    
    a = day[0]
	
    # 2. 그 리스트 앞에 숫자보다 뒤에 숫자가 더 작다면 +, 아니라면 append.
    for i in range(1,len(day)):
        if a >= day[i]:
            count += 1
        else:
            a = day[i]
            answer.append(count)
            count = 1
            
    answer.append(count)
    
    return answer

> 핵심 : 며칠째에 완성되는 지 각각 day 리스트에 넣어둔 후, 비교해서 배포 날짜 확정짓기 

 

 

 

🍦 코드 설명 (실행 순서대로 나열)

#solution

    answer = []
    day = []
    count = 1

1. 변수와 리스트를 초기화한다.

- answer : 정답 (리스트)

- day : 배포 가능해지는 날짜

- count : day 리스트 비교를 위함. (자기를 포함해야 하니까 1로 먼저 설정해둠) 

 

 

 

#solution - 각 기능 별로 배포 가능한 날짜 계산

	# 1. for문을 이용해 각각 언제 배포 가능해지는 지 append.	
    for i in range(len(progresses)):
        tmp = 100 - progresses[i]
        
        if tmp % speeds[i] == 0:
            day.append(tmp//speeds[i])
        else :
            day.append(tmp//speeds[i]+1)

2. progresses를 이용해 for문을 실행한다.

3. tmp에 100 - progresses[i] 값을 넣는다.

4. 만약 tmp가 speeds[i]로 나누어떨어진다면, tmp//speeds[i] 값을 day에 넣고,

                             나누어떨어지지 않는다면, tmp//speeds[i] + 1 값을 day에 넣는다.

 

 

 

#solution - 배포 가능 날짜 비교 후, 같은 날짜에 할 수 있는 것끼리 묶어서 answer에 넣기.

    a = day[0]
	
    # 2. 그 리스트 앞에 숫자보다 뒤에 숫자가 더 작다면 +, 아니라면 append.
    for i in range(1,len(day)):
        if a >= day[i]:
            count += 1
        else:
            a = day[i]
            answer.append(count)
            count = 1
            
    answer.append(count)
    
    return answer

5. 먼저, a에 day[0]을 넣는다.

 - 맨 처음이니까 day[0]을 기준으로 잡기 위해 day[0]을 넣어준 것임.

6. 만약, a가 day[i]보다 크다면 count에 1을 더해준다.

 - 이 말은 뒤에 있는 거는 같이 배포가 가능하다는 뜻이기 때문에 count에 1을 더해준 것이다.

 - 더 쉽게 말하면 그 뒤에 있는 기능은 진작 준비가 되어있었다는 거!

 

7. 만약, a가 day[i] 보다 작다면!

  a에 day[i]를 넣고, answer에 count를 추가하고, count를 1로 다시 초기화한다.

8. answer에 count를 append한다.

 - 맨 마지막에 쌓여있던 count를 마지막으로 append 한 것이다.

9. answer을 return한다.

 

 


끝~

⭐ 느낀점

> 잘 풀었땀. 다른 사람들 풀이보니까 day 리스트 같은 거 안 만들고 바로바로 한 사람들이 있더라. 너무 신기했다. 막 만족스럽지는 않은데 뭐.. 요정도면 그래도 괜찮았던 것 같다. 굿굿

저작자표시 (새창열림)

'🎲 알고리즘 공부 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)  (0) 2022.09.24
[프로그래머스 / Level 2] 카펫 (파이썬)  (0) 2022.09.23
[프로그래머스 / Level 2] JadenCase 문자열 만들기 (파이썬)  (0) 2022.09.22
[프로그래머스 / Level 2] 피보나치 수 (파이썬)  (0) 2022.09.20
[프로그래머스 / Level 2] 숫자의 표현 (파이썬)  (0) 2022.09.19
'🎲 알고리즘 공부/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 / Level 2] 영어 끝말잇기 (파이썬)
  • [프로그래머스 / Level 2] 카펫 (파이썬)
  • [프로그래머스 / Level 2] JadenCase 문자열 만들기 (파이썬)
  • [프로그래머스 / Level 2] 피보나치 수 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    6월 목표
    백준
    행렬덧셈
    티스토리챌린지
    피보나치수
    50문답
    연습문제
    코민이
    충무로
    프로그래머스
    오버워치
    코드업
    codeup
    til
    코테
    폰켓몬
    찬양추천
    일기
    코린이
    오블완
    파이썬
    BOJ
    신입일기
    정처기
    컨텐더스
    스프링부트
    스프링 부트
    정보처리기사
    카카오
    nodejs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[프로그래머스 / Level 2] 기능개발 (파이썬)
상단으로

티스토리툴바