관리 메뉴

솜씨좋은장씨

[Programmers] 스택/큐 : 기능개발 (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 스택/큐 : 기능개발 (Python)

솜씨좋은장씨 2020. 2. 25. 00:18
728x90
반응형

1일 1문제 19일차!

오늘의 문제는 프로그래머스의 기능개발 입니다.

 

코딩테스트 연습 - 기능개발 | 프로그래머스

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇

programmers.co.kr

첫번째 시도

이 문제를 풀기위해서 dictionary를 사용하기로 생각해보았습니다.

def solution(progresses, speeds):
    answer = []
    
    min_key = 0
    
    work_times_dic = {}
    
    for i in range(len(progresses)):
        work_time = (100 - progresses[i]) // speeds[i]

        if (100-progresses[i]) % speeds[i] != 0:
            work_time = work_time + 1
            
        my_keys = work_times_dic.keys()
        
        
        if i > 0:
            min_key = min(my_keys)


        
        if min_key < work_time and (work_time not in my_keys):
            work_times_dic[work_time] = 1
        elif min_key > work_time:
            work_times_dic[min_key] = work_times_dic[min_key] + 1

        
    work_times_dic = sorted(work_times_dic.items())
    
    
    for i in range(len(work_times_dic)):
        answer.append(work_times_dic[i][1])

    return answer

두번째 시도

dictionary에 값을 추가하는 조건을 추가해보았습니다.

def solution(progresses, speeds):
    answer = []
    
    min_key = 0
    
    work_times_dic = {}
    
    for i in range(len(progresses)):
        work_time = (100 - progresses[i]) // speeds[i]

        if (100-progresses[i]) % speeds[i] != 0:
            work_time = work_time + 1
            
        my_keys = work_times_dic.keys()
        
        
        if i > 0:
            min_key = min(my_keys)


        
        if min_key < work_time and (work_time not in my_keys):
            work_times_dic[work_time] = 1
        elif min_key > work_time:
            work_times_dic[min_key] = work_times_dic[min_key] + 1
        else:
            work_times_dic[work_time] = work_times_dic[work_time] + 1

        
    work_times_dic = sorted(work_times_dic.items())
    
    
    for i in range(len(work_times_dic)):
        answer.append(work_times_dic[i][1])

    return answer

세번째 시도

key로 사용되고 있는 변수들을 stack에 저장하여 확인하도록 하였습니다.

def solution(progresses, speeds):
    answer = []
    
    min_key = 0
    
    finish_time = []
    
    finish_time_stack = []
    
    for i in range(len(progresses)):
        work_time = (100 - progresses[i]) // speeds[i]

        if (100-progresses[i]) % speeds[i] != 0:
            work_time = work_time + 1
            
        finish_time.append(work_time)
    
    finish_time_dic = {finish_time[0]:1}
    
    finish_time_stack.append(finish_time[0])
    
    for i in range(1, len(finish_time)):
        if finish_time[i-1] > finish_time[i]:
            finish_time_dic[finish_time[i-1]] = finish_time_dic[finish_time[i-1]] + 1
        elif finish_time[i] not in finish_time_dic.keys():
            finish_time_dic[finish_time[i]] = 1
            finish_time_stack.append(finish_time[i])
        else:
            finish_time_dic[finish_time[i]] = finish_time_dic[finish_time[i]] + 1
            
            
    for key in finish_time_dic.keys():
        answer.append(finish_time_dic[key])
    print(finish_time_dic)
        
    return answer

네번째 시도

조건을 수정하여 도전해보았습니다.

def solution(progresses, speeds):
    answer = []
    
    min_key = 0
    
    finish_time = []
    
    finish_time_stack = []
    
    for i in range(len(progresses)):
        work_time = (100 - progresses[i]) // speeds[i]

        if (100-progresses[i]) % speeds[i] != 0:
            work_time = work_time + 1
            
        finish_time.append(work_time)
    
    finish_time_stack.append(finish_time[0])
    finish_time_dic = {finish_time[0]:1}
    
    for i in range(1, len(finish_time)):
        if finish_time[i-1] < finish_time[i] and (finish_time[i] > finish_time_stack[-1]):
            finish_time_dic[finish_time[i]] = 1
            finish_time_stack.append(finish_time[i])
        else:
            finish_time_dic[finish_time_stack[-1]] = finish_time_dic[finish_time_stack[-1]] + 1
            
    for key in finish_time_dic.keys():
        answer.append(finish_time_dic[key])
        
    return answer

 

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

 

Comments