본문 바로가기

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

코딩테스트 연습 스택/큐 기능개발

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

 

프로그래머스

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

programmers.co.kr

Solution

def solution(progresses, speeds):
    answer = []
    
    progresses = progresses[::-1]
    speeds = speeds [::-1]
    print(progresses, speeds)
    
    while True:
        if progresses == []:
            break
        for i in range(len(progresses)):
            progresses[i] += speeds[i]
        
        count =0
        while True:
            if progresses == []:
                break
            
            if progresses[-1] >=100:
                progresses.pop()
                count +=1
            else:
                break
        
        if count !=0 :
            answer.append(count)
    
    return answer

이 문제는 작업의 진도와 개발 속도가 주어졌을 때, 각 배포마다 몇 개의 기능이 배포되는지를 구하는 문제입니다. 작업의 개수는 최대 100개이며, 작업 진도와 속도는 자연수로 주어집니다.
주어진 배열을 순회하면서 각 작업의 배포일을 계산하고, 배포일이 현재 배포일보다 큰 작업들을 함께 배포하는 방식으로 접근할 수 있습니다. 배포일을 비교하여 작업을 함께 배포할지 여부를 결정하고, 배포마다 배포되는 기능의 수를 세어 결과를 반환하면 됩니다.

 

progresses와 speeds 배열을 [::-1]로 변경하여 마지막 작업부터 처리하도록 설정하고, 하나의 스택으로 놓고 문제를 푸니까 수월하게 풀렸습니다.

Attempt (parameter +=1)

def solution(progresses, speeds):
    answer = []
    print('here')
    
    day=1
    parameter = 0
    breaker = True
    while breaker:
        r = 0
        print("progresses", progresses, "parameter", parameter, "len progresses", len(progresses))
        if parameter == len(progresses)-1:
            break
        for i in range(len(progresses)):
            progresses[i] += speeds[i]
        
        if progresses[parameter] >= 100:
            parameter +=1
            r+=1
            print('progresses', progresses, "parameter", parameter)
            while True:
                if len(progresses) <= parameter:
                    break
                if progresses[parameter] >= 100:
                    r+=1
                
            
        
        day+=1
            
    return answer
print(solution([95, 90, 99, 99, 80, 99], [1, 1, 1, 1, 1, 1]))

처음엔 하나의 스택으로 생각하지 않고, parameter라는 변수를 두어, 각 문항이 100이상일 시, parameter를 하나씩 증가시켜가며 다음 값을 계산하려고 했는데, 위 스택으로 푼 것보다 훨씬 복잡하고 인덱스 에러가 많이 나는 것을 볼 수 있습니다. 다음부터 이런 문제를 보면 스택 구조로 풀면 간단하다는 것을 캐치하고 잘 풀어야할듯 합니다.