이번에 풀어볼 알고리즘 문제는 실패율 문제 풀이입니다.
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. 결과
성공입니다.
이번에는 프로그래머스 포스팅으로 찾아왔습니다.
사실 최근들어 회사 일이 조금 힘들어서 시간이 별로 없는데 시간이 될 때마다 알고리즘 포스팅으로 찾아올 계획입니다.
다음에도 도움될 수 있는 정보들로 찾아오겠습니다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[세무민의 코딩일기] 프로그래머스 : 우유와 요거트가 담긴 장바구니 문제 풀이 (0) | 2022.01.07 |
---|---|
[세무민의 코딩일기] 프로그래머스 : 헤비 유저가 소유한 장소 문제 풀이 (0) | 2022.01.05 |
[세무민의 코딩일기] 위클리 챌린지 8주차 최소직사각형 문제 풀이 (0) | 2021.10.30 |
[세무민의 코딩일기] 로또의 최고 순위와 최저 순위 문제 풀이 (0) | 2021.09.04 |
[세무민의 코딩일기] 프로그래머스 위클리 챌린지 2주차 상호 평가 문제 풀이 (0) | 2021.08.12 |