프로그래머스/LEVEL1

[프로그래머스] 성격 유형 검사하기 - JAVA(자바)

딘딘은딘딘 2023. 9. 15. 13:04
반응형

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 문제 : 2022 KAKAO TECH INTERNSHIP 성격 유형 검사하기


  • 설명 : 검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.

    질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다. 이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.
    .......
    너무 길어 생략 (링크 참고)

  • 풀이 :
import java.util.stream.Collectors;
import java.util.*;
class Solution {
    public String solution(String[] survey, int[] choices) {
        List<Map<String, Integer>> mapList = new ArrayList<>();

        Map<String, Integer> mapRT = new HashMap<>();
        Map<String, Integer> mapCF = new HashMap<>();
        Map<String, Integer> mapJM = new HashMap<>();
        Map<String, Integer> mapAN = new HashMap<>();

        mapRT.put("R" , 0);
        mapRT.put("T" , 0);
        mapList.add(mapRT);

        mapCF.put("C" , 0);
        mapCF.put("F" , 0);
        mapList.add(mapCF);

        mapJM.put("J" , 0);
        mapJM.put("M" , 0);
        mapList.add(mapJM);

        mapAN.put("A" , 0);
        mapAN.put("N" , 0);
        mapList.add(mapAN);

        for(int i=0; i<survey.length; i++) {
            String chart = survey[i];
            int choise = choices[i];
            String addStr = "";
            if(choise < 4) {
                addStr = String.valueOf(chart.charAt(0));
                switch (addStr) {
                    case "R" :
                    case "T" :
                        mapList.get(0).put(addStr, mapList.get(0).get(addStr) + (4 - choise));
                        break;
                    case "C" :
                    case "F" :
                        mapList.get(1).put(addStr, mapList.get(1).get(addStr) + (4 - choise));
                        break;
                    case "J" :
                    case "M" :
                        mapList.get(2).put(addStr, mapList.get(2).get(addStr) + (4 - choise));
                        break;
                    case "A" :
                    case "N" :
                        mapList.get(3).put(addStr, mapList.get(3).get(addStr) + (4 - choise));
                        break;
                }

            } else if(choise > 4) {
                addStr = String.valueOf(chart.charAt(1));
                switch (addStr) {
                    case "R" :
                    case "T" :
                        mapList.get(0).put(addStr, mapList.get(0).get(addStr) + (choise - 4));
                        break;
                    case "C" :
                    case "F" :
                        mapList.get(1).put(addStr, mapList.get(1).get(addStr) + (choise - 4));
                        break;
                    case "J" :
                    case "M" :
                        mapList.get(2).put(addStr, mapList.get(2).get(addStr) + (choise - 4));
                        break;
                    case "A" :
                    case "N" :
                        mapList.get(3).put(addStr, mapList.get(3).get(addStr) + (choise - 4));
                        break;
                }
            }
        }

        String answer = "";

        for(Map<String, Integer> m : mapList) {
            answer = answer + m.entrySet()
                                .stream()
                                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
                                .collect(Collectors.toList())
                                .get(0)
                                .getKey();
        }

        return answer;
    }
}

 

반응형