(프로그래머스) 실패율(자바/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를 사용해줘야한다.

 

 

이거 아주 귀찮다.

 

 

파이썬으로도 이런 접근방식으로 풀면 편하다.

 

(사실 파이썬으로 먼저 풀고 자바로 풀었다.)

반응형