Algorithm/프로그래머스

프로그래머스 실패율(2019 KAKAO BLIND RECRUITMENT) 문제 풀이

세기루민 2021. 11. 16. 23:18
728x90

이번에 풀어볼 알고리즘 문제는 실패율 문제 풀이입니다. 


1. 문제 설명 


2. 제한 사항 및 입출력 


3. 문제 풀이 

이번 문제는 스테이지 별로 구분할 필요가 있다. 

예를 들어서 N은 5, Stage는 [2, 1, 2, 6, 2, 4, 3, 3]을 그대로 풀이해보자. 

스테이지의 개수는 5, 즉 Stage가 가질 수 있는 값은 최대 5이며 그 이상은 제외하면 된다.

Stage를 나눠보면 2는 3명, 1은 1명, 3은 2명, 4는 1명 그리고 6은 스테이지 개수에 없기 때문에 제외한다. 

1스테이지부터 N스테이지까지 수를 아래의 표로 볼 수 있다. 

N : 1 1 / 8
N : 2 3 / 7 
N : 3 2 / 4
N : 4 1 / 2
N : 5 0 / 1

stage1의 경우 1개가 존재하기 때문에 전체 stage(8) 대비 1개를 가지고 있다.

stage2의 경우는 3개가 존재하며 stage1에서 1명이 멈춰 있기 때문에 전체 stage(8 -1) 대비 3개를 가지고 있다. 

stage3의 경우는 2개가 존재하고 stage1와 stage2에 멈춰있는 인원을 빼면 전체 stage(8 - 4) 대비 2개

stage4의 경우는 1개가 존재하고 stage1부터 3까지의 멈춰있는 인원을 빼면 전체 stage(8 - 6) 대비 1개

마지막 5 stage멈춰있는 사람이 없기 때문에 전체 stage(8 - 7) 대비 0개이다. 

즉 위의 설명을 코드로 풀이하면 문제를 풀 수 있다. 


4. 코드 풀이 

def solution(N, stages):
    lists = [[0 for i in range(2)] for j in range(N)]
    stageList = [0] * N
    answer = []
    count = 0
    stages.sort()
    
    
    for i, text in enumerate(stages):

        if(text > N):
            continue
        else:
            stageList[text-1] = stageList[text-1] + 1
            
    stageCount = len(stages)
    for i, text in enumerate(stageList):
        if(stageCount == 0):
            lists[i][0] = i+1
            lists[i][1] = 0
        else:
            lists[i][0] = i+1
            lists[i][1] = text / stageCount
            stageCount = stageCount- text
           
    lists.sort(key=lambda x:-x[1])
    
    for i,  text in enumerate(lists):
        answer.append(text[0])
    
    return answer

 

코드는 위와 같다. 

말 그대로 쪼개서 생각해보면 된다.

사실 queue나 deque으로도 구현할 수 있을 것이라고 생각했지만 가장 먼저 생각나는 방법으로 풀어봤다. 

enumerate는 자바로 따지면 iterater와 같은 역할을 한다.

우선 StageList에는 해당 1부터 N번째에 멈춰있는 사람의 합계를 구해주며 

lists에는 해당 1부터 N번째의 인덱스와 실패율을 담아준다. 

그 뒤 내장함수(lambda)를 이용하여 2차원 배열을 실패율 기준으로 정렬해준다.

마지막으로 정렬된 값을 기준으로 stage1부터 stageN까지의 인덱스를 출력해주면 된다. 


5. 결과

성공입니다.


이번에는 프로그래머스 포스팅으로 찾아왔습니다.

사실 최근들어 회사 일이 조금 힘들어서 시간이 별로 없는데 시간이 될 때마다 알고리즘 포스팅으로 찾아올 계획입니다.

다음에도 도움될 수 있는 정보들로 찾아오겠습니다. 

 

728x90