[프로그래머스] 실패율
2024. 8. 9. 09:07ㆍProblem Solving/Online Judge
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💬 문제 설명
전체 스테이지 별로 실패율을 구해야 함
실패율 = (스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수) / (스테이지에 도달한 플레이어 수)
📌 주의 사항
- 만약 실패율이 같은 스테이지가 있다면 작은 번호의 스테이지가 먼저 오도록 하면 된다.
👌 문제 풀이
- 스테이지 별로 실패율을 가지고 있는 Map 구현
- 스테이지 별로 실패율 계산
- keySet()으로 스테이지(key) 정보를 List에 담음(Set -> List)
- 실패율(value 기준)로 ketSet을 내림차순으로 정렬
- 정렬된 스테이지 정보를 담은 List를 Array로 변환하여 반환
💻 코드
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
class Solution {
public int[] solution(int N, int[] stages) {
// 1. Map 구현 - 키: 해당 스테이지 / 값: 실패율
Map<Integer, Float> map = new HashMap<>();
int left = stages.length;
// 2. 스테이지 별로 실패율 계산
for (int i = 0; i < N; i++) {
int count = getCount(stages, i + 1);
if (count > 0) {
map.put(i + 1, count / (float) left);
left -= count;
} else {
map.put(i + 1, 0f);
}
}
// 3. Map에서 키 정보만 List에 담기
List<Integer> keySet = new ArrayList<>(map.keySet());
// 4. Value 값(실패율)으로 내림차순 정렬
keySet.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return map.get(o2).compareTo(map.get(o1));
}
});
// 5. List -> Array
int[] answer = new int[keySet.size()];
for (int i = 0; i < answer.length; i++) {
answer[i] = keySet.get(i);
}
return answer;
}
// 배열에서 특정 값의 개수 계산
public int getCount(int[] array, int value) {
int count = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == value) {
count++;
}
}
return count;
}
}
🎓 배운 것
- keySet(): java.util.Map 객체에 포함된 모든 키(key)를 Set 형태로 반환한다.
- Map을 value 값 기준으로 정렬하는 방법
- Java에는 배열에서 특정 원소를 count할 수 있는 내장 함수가 없다. → for문으로 직접 구현 || Stream API를 활용
더보기
🎈 Java 8 이상부터는 Stream API를 활용하여 배열에서 특정 원소의 개수를 구할 수 있다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] array = {1, 2, 3, 1, 4, 1, 5};
int target = 1;
long count = Arrays.stream(array).filter(num -> num == target).count();
System.out.println("The number " + target + " appears " + count + " times.");
}
}
'Problem Solving > Online Judge' 카테고리의 다른 글
[프로그래머스] 베스트 앨범 (1) | 2024.08.21 |
---|---|
[프로그래머스] 주식가격 (0) | 2024.08.15 |
[BOJ] #1759 - 암호 만들기 (0) | 2021.06.29 |
[BOJ] #1987 - 알파벳 (0) | 2021.06.29 |
[BOJ] #9663 - N-Queen (0) | 2021.06.29 |