Skip to content

문제 016 : 기능 개발 #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: solutions
Choose a base branch
from
Open

문제 016 : 기능 개발 #65

wants to merge 2 commits into from

Conversation

tiaz0128
Copy link
Contributor

@tiaz0128 tiaz0128 commented Jan 29, 2024

소요시간

  • 20분

사용한 자료구조, 알고리즘

해당 자료구조, 알고리즘을 사용한 근거

  • 차례로 빠져나가는 구조

어려웠던 구현 포인트

  • 좀더 효율적인 로직을 작성하지 못한거 같다.

구현한 코드의 시간 복잡도

  • $O(N ^2)$
  • 책 풀이는 $O(N)$

추가한 테스트 케이스와 그 이유

  • 없음

개선이 필요한 부분은?

  • 실제로 큐를 안쓰고 풀는 방법을 책에서 알려준다.
  • 책에서 보면 수학적인 방법으로 더 효율적인거 같다.

Copy link
Contributor

👋 @tiaz0128 님 안녕하세요!
코딩 테스트 합격자 되기(파이썬 편) : 문제 016 를 풀고 있으시네요!
해당 문제의 책 페이지와 프로그래머스 링크를 알려드릴께요!

07장 큐
기능 개발 ⭐⭐
코딩 테스트 합격자 되기(파이썬 편) - p195
프로그래머스 link

  1. 테스트가 실패한 경우 다시 한번 문제를 풀어서 push 해보세요!
  2. 로컬에서 디버깅도 해보고 스스로 코멘트를 달면서 공부해보세요!
  3. 다시 한번 문제를 풀어서 push 해보세요!

@github-actions github-actions bot added 문제016 Pass 테스트에 성공했습니다. Merge 해주세요! labels Jan 29, 2024
Copy link
Contributor

🎉 @tiaz0128 님. 축하 합니다!

문제 016 테스트를 통과하셨습니다!
solutons 브랜치에 Merge 해주세요!

도움이 필요한 사람들이 있으면 도와주세요! 소통하면서 더 성장 할 수 있는 좋은 기회입니다!
문제 016 - 도움주러 가기

Copy link
Contributor

✨ 아래의 코드는 테스트를 통과한 코드입니다.

from collections import deque


def solution(progresses, speeds):
    pq = deque(zip(progresses, speeds))
    stack = []

    while pq:
        for idx, (pro, speed) in enumerate(pq):
            pq[idx] = (pro + speed, speed)

        cnt = 0
        for item in pq:
            if item[0] >= 100:
                cnt += 1
            else:
                break

        if cnt > 0:
            for _ in range(cnt):
                pq.popleft()

            stack.append(cnt)

    return stack

@tiaz0128 tiaz0128 changed the title 문제 016 : 문제 016 : 기능 개발 Jan 29, 2024
Copy link
Contributor

🎉 @tiaz0128 님. 축하 합니다!

문제 016 테스트를 통과하셨습니다!
solutons 브랜치에 Merge 해주세요!

도움이 필요한 사람들이 있으면 도와주세요! 소통하면서 더 성장 할 수 있는 좋은 기회입니다!
문제 016 - 도움주러 가기

Copy link
Contributor

✨ 아래의 코드는 테스트를 통과한 코드입니다.

import math


def solution(progresses, speeds):
    answer = []

    n = len(progresses)

    days_left = [math.ceil((100 - progresses[i]) / speeds[i]) for i in range(n)]
    max_left = days_left[0]
    cnt = 0

    stack = []

    for day in days_left:
        if day <= max_left:
            cnt += 1
        else:
            stack.append(cnt)
            cnt = 1
            max_left = day

    stack.append(cnt)
    return stack

@tiaz0128
Copy link
Contributor Author

큐를 안쓰고 푸는 방법은 $O(N)$ 으로 10배? 는 빠르결과로 나왔다.

다행이 효율성을 묻지 않는 문제였기 때문에 $O(N^2)$ 도 통과하는거지만

최대한 효율이 높은 코드를 작성하는게 좋을듯 하다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Pass 테스트에 성공했습니다. Merge 해주세요! 문제016
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant