(프로그래머스) 실패율(자바/Java) - 2019 카카오 문제
2022. 9. 22. 01:10ㆍ프로그래머스 문제풀이
반응형
문제는 여기에
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
재미있는 문제다.
간단하긴 한데, 다른 사람들이 푼 풀이를 보니 전부 Map의 sort기능만 사용하고,
stream을 사용한 사람이 거의 없다시피 해서 내가 작성한 코드를 공유하려 한다.
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
// 실패율
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = {};
Map<Integer, Float> map = new HashMap<>();
int total = stages.length;
for(int i = 1; i <= N; i++) {
if(total != 0) {
final int comparable = i;
int count = (int)Arrays.stream(stages).filter(x -> x == comparable).count();
int value = total;
final float v = (float)(((double)count / value));
map.put(comparable, v);
total -= count;
} else {
map.put(i, 0.0f);
}
}
List<Map.Entry<Integer, Float>> entries = map.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList());
List<Integer> list = new ArrayList<>();
for(Map.Entry<Integer, Float> entry : entries) {
list.add(entry.getKey());
}
return list.stream().mapToInt(Integer::intValue).toArray();
}
}
코드를 보자마자 접근 방식이 이해가 갈 것이다.
(안 가면 댓글 달아주세욥)
생소한 부분이 Map.Entry일 것 같다.
Map.Entry는 Map을 key,value 한 쌍으로 묶어서
키 값과 value 값에 동시에 접근이 가능하다.
그리고 List<Integer>를 array로 변환하려면 단순히 toArray는 안 되고,
반드시 mapToInt를 사용해줘야한다.
이거 아주 귀찮다.
파이썬으로도 이런 접근방식으로 풀면 편하다.
(사실 파이썬으로 먼저 풀고 자바로 풀었다.)
반응형