상세 컨텐츠

본문 제목

[coding_test]기능개발

coding/coding_test

by golduny_zoo 2021. 5. 25. 17:17

본문

728x90

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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

95 - 100를 일차로 두고 speed로 나누었을 때 몫을 리스트로 두고 

앞수를 기준으로 따라 크거나 같으면 cnt를 증가시키고,

더 큰수이면 다시 그 수를 기준으로 cnt를 측정하고,

정답을 뽑아냈다.

def solution(progresses, speeds):

    from collections import deque
    answer =[]
    success = deque()
    for progress, speed in zip(progresses, speeds):
        success.append((100-progress)//speed)

    while success:
        day= success.popleft()
        cnt =1
        if len(success) == 0:
            answer.append(cnt)
            break
        while success[0] <= day:
            cnt += 1
            success.popleft()
            if len(success) == 0:
                break

        answer.append(cnt)
    return answer

어머나? 한문제만 풀리지 않아 당황했다. 

내가 놓친 부분이 있을까? 문제를 다시 보았으나.. 

이런.. 올림을 해야했지만 내가 했던건 전부 남은 일수를 버리는 몫만 구하는 수를 사용했던것

그래서 올림을 코드로 구현하여 표현했더니 통과과 되었다.

def solution(progresses, speeds):

    from collections import deque
    answer =[]
    success = deque()
    for progress, speed in zip(progresses, speeds):
        work_time = (100-progress)//speed
        if (100-progress)%speed != 0: 
            work_time = work_time + 1

        success.append(work_time)
    while success:
        day= success.popleft()
        cnt =1
        if len(success) == 0:
            answer.append(cnt)
            break
        while success[0] <= day:
            cnt += 1
            success.popleft()
            if len(success) == 0:
                break

        answer.append(cnt)
    return answer

문제풀이 후

  • 문제를 푼 사람들의 코드를 확인해 보았다. 올림을 나처럼 복잡하게 사용한 것이 아닌.. 음수를 사용하여 올림을 표현할 수 있다는 것이 놀라웠다. 
for progress, speed in zip(progresses, speeds):
  work_time = (100-progress)//speed
    if (100-progress)%speed != 0: 
    	work_time = work_time + 1
for progress, speed in zip(progresses, speeds):
        work_time = -((progress-100)//speed)

간단하게 사용한 코드를 보고 한번 더 놀라웠다. 

또한 math 라이브러리에서 ceil이 올림을 만들어 줄 수 있었다.(라이브러리를 사용하는 것도 좋지만 음수를 사용한것이 놀라웠다.)

 

  • deque 를 불러오지 않아도 for문을 이용하여 풀 수 있는 문제였다. 

하지만 조금더 FIFO문제에 익숙해진 것같아 좋았다.

'coding > coding_test' 카테고리의 다른 글

[coding_test]큰 수 만들기  (0) 2021.06.09
[coding_test]크레인 인형뽑기  (0) 2021.05.31
[coding_test]더 맵게  (0) 2021.05.24
[coding_test]음양 더하기  (0) 2021.05.20
[coding_test]로또의 최고 순위와 최저 순위  (0) 2021.05.20

관련글 더보기