우보천리 개발
[프로그래머스] 42889 카카오 기출 - 실패율 Java 본문
반응형
42889 프로그래머스 카카오 기출 실패율
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이디어
- 실패율을 구하는 공식은 스테이지 클리어 못한 플레이어 수 / 스테이지 도달한 플레이어 수
- 그렇기 때문에 클리어를 못한 사람과, 도달한 플레이어를 카운팅 해주어야한다
- 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호를 출력해야 되기 때문에
- 스테이지 번호와 해당 스테이지의 실패율을 저장할 클래스를 만든다
- 더 자세한건 코드 내 주석을 통해 설명
코드
// 프로그래머스에 직접 입력한 코드이기에 따로 실행하면 안됨
import java.util.*;
class Node implements Comparable<Node> {
int stage; // 스테이지번호
double fail_rate; // 실패율
public Node(int stage, double fail_rate) {
this.stage = stage;
this.fail_rate = fail_rate;
}
@Override
// 실패율을 내림차순으로 정렬
public int compareTo(Node other) {
return Double.compare(other.fail_rate, this.fail_rate);
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
ArrayList<Node> al = new ArrayList<>();
// 스테이지 번호 1~N까지의 스테이지에 대해서
for (int i=1; i<=N; i++) {
int reached = 0; // 해당 스테이지를 도달한 사람
int failed = 0; // 스테이지를 도달했지만 클리어 못한 사람
// 주어진 배열을 탐색하는데
for (int j=0; j<stages.length; j++) {
if (stages[j] == i) { // 현재 스테이지와 플레이어가 도전중인 스테이지가 같으면
failed++; // 실패인원 ++
// 이유는 예를 들어 1번 스테이지, 현재 플레이어가 도전 중 스테이지가 1이면
// 아직 1을 도전중.. 2번, 3번 ... 스테이지는 도전 못했음
}
// 플레이어가 현재 스테이지와 같거나 크면 클리어했다
if (stages[j] >= i) {
reached++;
}
}
// reached가 0이라는 것은 실패율이 0
// Node에 해당 스테이지와 실패율 0 저장
if (reached == 0) {
al.add(new Node(i, 0));
}
// 그렇지 않으면 해당 스테이지의 실패율을 공식에 따라 저장
else {
al.add(new Node(i, (double) failed / reached));
}
}
Collections.sort(al);
for (int i=0; i<al.size(); i++) {
answer[i] = al.get(i).stage;
}
return answer;
}
}
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단어 변환 - 자바 (0) | 2023.02.28 |
---|---|
[프로그래머스] 타겟 넘버 - 자바 (0) | 2023.02.28 |
Comments