[프로그래머스/Python] 기능 개발

minj-j·2022년 6월 30일
0

CodingTest

목록 보기
3/14

내가 풀이한 코드 (정답나옴) 🐿️
참고한 코드 https://devmath.tistory.com/2

def solution(progresses, speeds):
    rele = [] #결과 저장하는 배열
    count = 0
    day = 0
    for _ in range(len(progresses)):
        top = progresses.pop(0)
        top2 = speeds.pop(0)
        while True:
            if (top + day * top2) >= 100:
                count += 1
                print(count)
                break
            else :
                if count > 0:
                    rele.append(count)
                    count = 0
                day += 1
    rele.append(count)
    return rele
print(solution([93, 30, 55], [1, 30, 5]))

이틀에 걸쳐 풀었던 문제는 Level2 스택/큐 타입의 문제였습니다.
문제를 보고 progresses에서 값을 하나씩 빼와서 speeds에 있는 값을
100이 될 때까지 더한 후에 그 값으로 result를 내면 되지 않을까? 하는 생각을 했습니다.

처음에 풀이한 코드 🐿️

work = [] #일한 날 수를 저장하는 배열
result = []
rele = []
count = 0

for _ in range(len(progresses)):
    top = progresses.pop(0)
    print("--------")
    print(top)
    top2 = speeds.pop(0)
    print(top2)
    print("--------")
    while True:
        top =  top + top2
        print(top)
        work.append(top)
        if top >= 100:
            workCount = len(work)
            print(len(work))
            result.append(workCount)
            # print(result)
            work.clear()
            break

print(result)
print("--------")

(여기서 부터는 반말)

중간중간 결과 값을 확인하느라 print가 많이 찍혀있다.
그래서 보기에 불편할 것이다. 근데 딱히 안봐도 상관 없다.
어차피 틀린거니까 ^_ㅠㅠㅠㅠ

우선 실패요인은 내가 "한 작업물이 끝나는데 걸리는 날"을 중점적으로
구하는 바람에 코드가 이렇게 짜졌다.

왜 이렇게 짰는가 하면
예를들어 끝나는데 걸리는 시간들이 [7,3,9]
이런 형태로 나오면 배열의 앞 뒤 비교해서
대충 이렇게 저렇게 하면 되겠지 하는 생각으로 코드를 짰던 것이다.

근데 막상 해보니까 for문을 너무 많이 쓰게 되고
range over도 일어나서 굉장히 비효율적이었다.
개인적으로 해결해 보고자 하였으나 결국 다른 분들의 풀이를
참고할 수 밖에 없었다.

참고한 코드 https://devmath.tistory.com/2
이분 블로그를 참고하여 문제를 풀이했다. 3-1번 풀이를 사용했다.

#내가 처음 풀이 했던 틀린 코드 일부분

...
while True:
        top =  top + top2 #top = progresses top2 = speeds
        print(top)
        work.append(top)
        if top >= 100:
        ...
...

나는 이 처럼 이마 진행되고 있는 사항이 100이 될 때까지
speed를 계속해서 더하는 형태로 일이 마무리 될 때까지 걸리는 시간을 구했다.하지만 이러면 매번 한 작업에 대해 걸리는 시간 밖에 구할 수 없게 된다.

그래서 참고한 분의 블로그 글 내용 처럼

day = 0
    for _ in range(len(progresses)):
        top = progresses.pop(0)
        top2 = speeds.pop(0)
        while True:
            if (top + day * top2) >= 100: #수정한 부분
                count += 1 #처리될 작업물 개수 count
                print(count)
                break
            else :
                if count > 0:
                    rele.append(count)
                    count = 0
                day += 1
                ....

day 변수를 추가해 progresses(=top)에 day와 speeds(=top2)를 더한 값이 100보다 크거나 같으면 처리될 작업물 개수를 count 할 수 있게 해주었다.

심지어 이 분 풀이는 progresses와 speeds 내의 값들을 pop하는 방법도 간단했다. 나는 어찌나 비효율적인지........ 근데 고치진 않았다. 내가 한 풀이도 남겨둬야 하긴 할 것 같아서 ^^..
그냥 내가 생각해서 풀이하였다는 것에 의의를 둬야 할 것같다.

사담 🐿️

Level2 문제 푸는데 이틀이 걸릴 줄은 몰랐네요
사실 쉽게 풀 수 있었는데 제가 괜한 객기를 부리는 바람에
코드 풀이에 생각보다 시간을 많이 썼습니다.

저는 사실 문제를 풀이하는 행위 자체는 좋아해요
문제 해결 방법에 대해 고민하고 그 답을 하나하나 찾아나가서
결국 맞추면 그 문제를 풀면서 한 생각과 알게 된 지식이
모두 제 것이 된 것같아 좋아합니다.

근데 고집은 적당히 부려야 하더라고요
모르는게 있으면 빨리 방법을 찾고
다음으로 넘어가는 융통성도 필요한 것 같습니다.

지금처럼 시간이 없을 때는 말이에요.(취준 중)

여기까지 입니다. 감사합니다. 🐇

profile
minj-j`s Development diary!

0개의 댓글