알고리즘/프로그래머스

[프로그래머스] 기능개발 (코딩테스트 연습 | 스택/큐)

KyuminKim 2024. 9. 10. 16:42

문제

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

 

프로그래머스

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

programmers.co.kr

 


 

아이디어

✅ 우선 days 배열을 만든다

  • days 배열
    • 각각 일을 다 마치기(100%)까지 걸리는 날짜
    • ⚠️ speed로 나누어 떨어지는 경우 / 그렇지 않은 경우 나눠서 연산

 

days를 앞에서부터 순회 -> 정답 구함

  • days 순회
    • 뒤 원소가 작다면, 무시하고 그 다음 큰 원소 찾음
    • 7 3 9 -> 7 9
    • ⚠️ days.append(101)을 통해 마지막 원소도 정상적으로 출력하도록 함
  •  

코드

def solution(progresses, speeds):
    answer = []
    days = []
    
    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0:
            days.append((100-progresses[i]) // speeds[i])
        else:
            days.append((100-progresses[i]) // speeds[i] + 1)
    
    days.append(101)
    
    temp = days[0]
    answer_temp = 0
    
    for day in days:
        if temp >= day:
            answer_temp += 1
            
        elif temp < day:
                answer.append(answer_temp)
                answer_temp = 1
                temp = day
    
    return answer

 


다른 사람 풀이

✅ math.seil 함수

  • (실수) 반올림하여 정수 반환 함수
  • -((p-100)//s)
    • 음수 // 연산 후 - 연산
    • math.seil과 같은 효과
  • days 배열 산출 코드 단축 가능

 

✅ math.floor 함수

  • (실수) 반내림하여 정수 반환 함수

 

✅ zip 함수 활용

for p, s in zip(progresses, speeds):
  • days 배열 산출 코드 단축 가능