문제
https://programmers.co.kr/learn/courses/30/lessons/42889#
풀이
단순 구현 문제이다.
변수가 헷갈려서 머리가 핑 도는 모먼트가 몇 번 있었다.
Stage 클래스를 만들어서 문제를 풀었다.
소스코드
import java.util.*;
class Stage implements Comparable<Stage>{
int no;
double passCnt;
double failCnt;
double rate;
public Stage(int no){
this.no = no;
}
public void calc(int N){
if(passCnt == 0 && failCnt ==0) rate = 0;
else if(passCnt == 0) rate = 1;
else if(failCnt == 0) rate = 0;
else this.rate = this.failCnt/(this.passCnt + this.failCnt);
}
@Override
public int compareTo(Stage s){
if(this.rate - s.rate > 0) return -1;
else if(this.rate - s.rate < 0) return 1;
else return this.no - s. no;
}
}
class Solution {
public int[] solution(int N, int[] stages) {
ArrayList<Stage> list = new ArrayList<Stage>();
for(int i = 1; i <= N; i++){
list.add(new Stage(i));
}
// 통과한 사람수 / 머물러 있는 사람수
for(int cur : stages){
for(int j = 1; j < cur; j++){
list.get(j-1).passCnt++;
}
if(cur == N+1) continue;
list.get(cur-1).failCnt++;
}
for(Stage s : list){
s.calc(stages.length);
}
Collections.sort(list);
return list.stream().mapToInt(x -> x.no).toArray();
}
}
Python
도달 했지만 통과 못한 사람 수를 stage별로 저장
1번 스테이지부터
도달 했지만 통과 못한 사람 수 / 도달한 사람 수
실패율 계산
다음 스테이지에서 도달한 사람 수는 이전 스테이지에서
도달한 사람 수에 도달했지만 통과 못한 사람 수를 뺀 값을 사용한다.
예를 들어 2번 스테이지라면,
2번 스테이지에 도달했지만 통과 못한 사람 수 / (1번 스테이지에 도달한 사람 수 - 1번 스테이지에서 통과 못한 사람 수)
이렇게 쭉 계산해서 각 스테이지별 실패율을 저장
실패율 내림차순, 스테이지 오름차순으로 정렬 후
스테이지 출력
def solution(N, stages):
answer = []
arrive_but_not_clear = [0]*(N+2)
arrive = [0]*(N+2)
stages.sort()
for cur_stage in stages:
arrive_but_not_clear[cur_stage] += 1
arrive = len(stages)
rate = []
for i in range(1, N+1):
if arrive == 0:
rate.append((0, i))
continue
rate.append((arrive_but_not_clear[i]/arrive, i))
arrive -= arrive_but_not_clear[i]
rate.sort(key = lambda x:(-x[0], x[1]))
for i in range(N):
answer.append(rate[i][1])
return answer
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 캐시 (Java) (0) | 2021.11.22 |
---|---|
[프로그래머스] 위장 (Java) (0) | 2021.11.21 |
[프로그래머스] 단체사진 찍기 (Java) (0) | 2021.11.18 |
[프로그래머스] 디스크 컨트롤러 (Java) (0) | 2021.11.17 |
[프로그래머스] 키패드 누르기 (Java) (0) | 2021.11.14 |