Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 성격 유형 검사하기 본문

Java

프로그래머스: 성격 유형 검사하기

Daeryuk Kim 2024. 1. 20. 15:36
import java.util.Map;
import java.util.HashMap;

class Solution {
    public String solution(String[] survey, int[] choices) {
        Map<Character, Integer> map = new HashMap<>();
        
        for (int x=0; x<survey.length; x++) {
            // 매우 비동의 ~ 매우 동의 점수값을 받아온다.
            int val = choices[x];
            
            
            //매우 비동의, 비동의, 약간 비동의 어쨌든 비동의
            if(val > 0 && val < 4) {
                // 앞에 문자를 하나 담는다.
                char ch = survey[x].charAt(0);
                // 어떻게 하든 더 큰 사이즈의 픽은 점수 순으로 3,2,1로 배정되어야 한다.
                // 그래서 4-1=3, 4-2=2, 4-3=1이 되는 것이다.
                map.put(ch, map.getOrDefault(ch, 0) + 4 - val);
            } 
            // 약간 동의, 동의, 매우 동의 어쨌든 동의
            else if(val > 4) {
                // 뒤에 문자를 하나 담는다.
                char ch = survey[x].charAt(1);
                // 어떻게 하든 더 큰 사이즈의 픽은 점수 순으로 1,2,3로 배정되어야 한다.
                // 그래서 5-4=1, 6-4=2, 7-4=3 이 되는 것이다.
                map.put(ch, map.getOrDefault(ch, 0) + val - 4);
            }
        }
        
        return new StringBuilder()
            // 앞의 형태의 숫자가 더 큰가? 맞다면 앞의 문자를 추가함.
            // 이게 좋은 점이, 0 0 으로 같을 때도 사전순으로 정렬할 필요도 없음.
            .append(map.getOrDefault('R', 0) >= map.getOrDefault('T', 0) ? 'R' : 'T')
            .append(map.getOrDefault('C', 0) >= map.getOrDefault('F', 0) ? 'C' : 'F')
            .append(map.getOrDefault('J', 0) >= map.getOrDefault('M', 0) ? 'J' : 'M')
            .append(map.getOrDefault('A', 0) >= map.getOrDefault('N', 0) ? 'A' : 'N')
            .toString();
    }

    public static void main(String[] args) {
        
        /*
        A: 어피치형  N: 네오형
        C: 콘형     F: 프로도형
        M: 무지형   J: 제이지형
        R: 라이언형  T: 튜브형
        */
        String[] survey = {"AN", "CF", "MJ", "RT", "NA"};
        
        /*
        1	매우 비동의 = 3
        2	비동의     = 2
        3	약간 비동의 = 1 
        4	모르겠음    = 0
        5	약간 동의   = 1
        6	동의       = 2
        7	매우 동의   = 3  
        */
        int[] choices = {5, 3, 2, 7, 5}; // 1, 1, 2, 3, 1점
        /*
        N에 +1
        C에 +1
        M에 +2
        T에 +3
        A에 +1
        
        고로,
        1) R: 0   T: 3 => T
        2) C: 1   F: 0 => C
        3) J: 0   M: 2 => M
        4) A: 1   N: 1 => A
        */ 
    
        Solution sol = new Solution();
        String result = sol.solution(survey, choices);
        System.out.println(result); 
    }
}

맵, 해시맵을 사용해서 빈도수가 높은 유형을 채택하는 방식이다.

이거는 정말 많이 연습을 해야 능숙하게 다룰 것 같다.

아직 많이 작성하기 까다롭다.