본문 바로가기

자료구조 & 알고리즘 & cs/CodingTest

[python] 프로그래머스 Lv2. - 기능개발

코딩테스트 연습 - 기능개발 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

스택과 큐를 활용하는 문제이다.

스택과 큐 문제는 대부분 구현 가능하기는 한데

문제에서 주어진 상황에서 스택과 큐를 어떤 방식으로 활용해야 할지 아직 감을 못잡겠다.

 

그래서 처음에는 for문을 3개나 사용하여 해결하였더니 복잡한 코드가 나왔다.

def solution(progresses, speeds):
    answer = []
    
    for i in range(len(progresses)):
        rest=100-progresses[i]
        
        if rest % speeds[i] == 0:
            progresses[i]=(rest // speeds[i])
        else:
            progresses[i]=(rest // speeds[i])+1
            
    for i in range(len(progresses)-1):   
        if progresses[i] >= progresses[i+1]:
            progresses[i+1]=progresses[i]
    
    cnt=1
    for i in range(1,len(progresses)):
        if progresses[i] == progresses[i-1]:
            cnt+=1
        else:
            answer.append(cnt)
            cnt=1
        if i == len(progresses)-1:
            answer.append(cnt)
        
    print(answer)
    return answer

 너무 길고 지저분한 코드였고 스택/큐를 활용하지 못했기 때문에 다른 풀이를 참고하였다.

 

def solution(progresses, speeds):
    answer = []
    time = 0
    count = 0
    
    while len(progresses)> 0:
        if (progresses[0] + time*speeds[0]) >= 100: 
            progresses.pop(0)
            speeds.pop(0)
            count += 1
            
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer

 

문제에서 원하는 풀이 방식인 것 같다.

나는 배포일자를 모두 구한 다음 시작하려고 했는데

잘못된 생각이었다.

 

앞으로 스택/큐 관련 문제를 많이 풀어봐야 할 것 같다.

728x90