minzzl

[프로그래머스] - 스택/큐. 기능개발 본문

Algorithm/프로그래머스

[프로그래머스] - 스택/큐. 기능개발

minzzl 2023. 3. 6. 15:53
728x90
반응형

안녕하세요 ~!

스택 큐는 아주 스무스 하게 해나가고 있습니다 .. 

그럼에도 이렇게 블로그에 남기게 된 이유는 아차했던 부분을 짚고 넘어가기 위함입니동 그라미 !

 

문제

풀이

솔직하게 말하면 ..

입출력 예시를 보기 전까지는 문제 이해도 못했습니다 ~! ^^

예시를 주셔서 넘 감사합니다 ...

 

 

작업 모두 100까지 채워지도록 해야하고, 각각의 잡업이 100까지 채워지는 속도는 모두 다릅니다.

또한, 앞의 작업이 완료 될 때까지, 뒤의 잡업이 완료 되었더라도 기다려야하죠.

 

사실 100까지 채워지도록 하는 일수까지는 계산하는 것이 아주 쉽습니다.

그냥 각각의 작업들이 100까지 채워지려면 얼마나 남았는지 계산하고,

이를 그 작업의 속도에 맞게 남은 일수를 계산하면 됩니다.

 

그런 다음에 앞의 작업이 완료될 때 까지 뒤의 작업은 기다려야하고, 기다리고 있었다면 앞의 작업이 완료되는 시점에 같이 끝내면 되는데, 

각 시점에 완료되는 기능의 수를 answer 배열에 넣어주어야합니다.

 

저는 왜인지 모르겠지만 Greedy 가 생각이 났습니다.

남은 일수를 담아 놓은 배열을 돌면서 더 큰 일수를 만날 때 까지 누적해서 count하고, 만나면 현재까지의 누적값을 answer 배열에 넣는 것이죠.

 

아 !

그리고 테스트 케이스 11번이 계속 오류가 났었는데 ...

제가 나머지 일수를 계산하는 연산에서 // 를 썼었는데...

// 연산은 소숫점 이하를 버린다는 것을 잊고 있었습니다....

 

만약 몫이 2.33 이었다면

일수는 3일이 되어야겠죠 ....?

그래서 나누어 떨어지지 않는 경우를 고려해서 코드 수정했습니다람쥐

나의 코드

 

def solution(progresses, speeds):
    answer = []
    diff = []
    for i in range(len(progresses)):
        diff.append(100-progresses[i])
    for i in range(len(speeds)):
      # // 연산은 나누기 할 때 소수점 이하를 버린다 .. 이를 주의해야함 !

    	#만약 나누어 떨어지지 않는 값이라면 ...
        if  diff[i]%speeds[i] != 0:
            diff[i] = diff[i]//speeds[i] + 1
        else:  
            diff[i] = diff[i]//speeds[i]   
    max = 0    
    cnt = 1
    for i in range(len(diff)):
        
        if i == 0:
            max = diff[i]
        else:
            if diff[i]<=max:
                cnt += 1
            else:
                answer.append(cnt)
                cnt = 1
                max = diff[i]
    answer.append(cnt)            
    return answer

 

다른 사람 코드

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]

 

저번 글에서도 적었지만 ...

zip 함수를 정말 많이 사용하네요 ...

 

근데 저한테는 아직 zip 이 낮설어서인지 사용하기가 쉽기 않은 것 같습니다 ..

번거롭지 않게 코드를 작성하는데에는 최고의 방법이지만, 아직은 힘드네욤 ...후하하하

728x90
반응형