알고리즘/PROGRAMMERS

성격 유형 검사하기(Lv.1)

현대타운301 2024. 3. 21. 00:57

 


 

문제 설명

 

 

 

입출력 예시

 

 

요약

4가지 질문 유형에 따른 점수를 계산해서 성격유형 return

 


 

풀이

 

문제 해석

알파벳 순서와 점수에 따라 나눠서 계산하기

 

 

접근 방식

1. 질문 유형을 2개로 나누기

  → [ RT, CF, MJ, AN ] -> [ R, T, C, F, M, J, A, N ]

 

2. 점수에 따라 각 알파벳에 해당하는 값 증가

  → RT 7의 경우: T + 3

 

3. 알파벳 순서 고려

  → 만약 R과 T의 점수가 같은 경우 R 선택

 


 

코드리뷰

 

import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        HashMap<String, Integer> map = new HashMap<>();
        String[] arr = {"R", "T", "C", "F", "M", "J", "A", "N"};	// 각 질문 항목을 개별로 나누기
        for(String str : arr) {
            map.put(str, 0);	// 0으로 초기화
        }
        for(int i = 0; i < choices.length; i++) {
            int score = choices[i];
            String str1 = String.valueOf(survey[i].charAt(0));
            String str2 = String.valueOf(survey[i].charAt(1));
            if(score > 4) {	// 5, 6, 7점에 대한 처리(뒤에 해당하는 문자의 value를 각각 +1, +2, +3)
                map.put(str2, map.getOrDefault(str2, 0) + choices[i]-4);
            } else if(score == 1) {	// 1점이라면 '매우 비동의'에 해당하므로 앞에 문자에 해당하는 value + 3
                map.put(str1, map.getOrDefault(str1, 0) + 3);
            } else if(score == 2) {	// 2점은 앞에 문자 value +2
                map.put(str1, map.getOrDefault(str1, 0) + 2);
            } else if(score == 3) {	// 3점은 앞에 문자 value +1
                map.put(str1, map.getOrDefault(str1, 0) + 1);
            }
        }
        System.out.println(map);
        String answer = "";
        if(map.get("R") >= map.get("T")) {	// R점수와 T점수를 비교(같으면 알파벳 순으로 리턴)
            answer += "R";
        } else {
            answer += "T";
        }
        if(map.get("C") >= map.get("F")) {	// C점수와 F점수를 비교(같으면 알파벳 순으로 리턴)
            answer += "C";
        } else {
            answer += "F";
        }
        if(map.get("J") >= map.get("M")) {	// J점수와 M점수를 비교(같으면 알파벳 순으로 리턴)
            answer += "J";
        } else {
            answer += "M";
        }
        if(map.get("A") >= map.get("N")) {	// A점수와 N점수를 비교(같으면 알파벳 순으로 리턴)
            answer += "A";
        } else {
            answer += "N";
        }
        return answer;
    }
}