본문 바로가기

프로그래머스(Java)/Level 1

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

728x90

코드 힌트

  1. 성격 유형 초기화:
    • 성격 유형을 두 개씩 묶어 저장하는 배열을 초기화합니다. 예를 들어, {'R', 'T'}는 한 쌍의 성격 유형을 의미합니다.
    • 각 성격 유형의 점수를 저장하기 위해 해시맵을 초기화합니다. 이때 초기값으로 모든 성격 유형의 점수를 0으로 설정합니다.
  2. 점수 계산:
    • survey 배열과 choices 배열을 순차적으로 탐색합니다.
    • 각 설문 항목에서 첫 번째 성격 유형과 두 번째 성격 유형을 추출합니다.
    • choices 값에 따라 점수를 분배합니다. 만약 선택한 값이 4보다 크면 두 번째 성격 유형에 점수를 더하고, 4보다 작으면 첫 번째 성격 유형에 점수를 더합니다.
  3. 결과 조합:
    • 각 성격 유형 쌍에서 점수가 높은 성격 유형을 선택해 결과 문자열에 추가합니다.
    • 동일한 점수일 경우 배열에서 앞에 있는 성격 유형을 우선 선택합니다.

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        // 각 성격 유형 쌍의 점수를 저장하기 위한 맵
        HashMap<Character, Integer> map = new HashMap<>();
        String result = "";
        
        // 성격 유형 초기화 (성격 유형 쌍을 배열로 선언)
        char[][] keyArr = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
        
        // 각 성격 유형의 점수를 0으로 초기화
        for (char[] key : keyArr) {
            map.put(key[0], 0);
            map.put(key[1], 0);
        }
        
        // 설문조사 결과를 바탕으로 점수 계산
        for (int i = 0; i < survey.length; i++) {
            char first = survey[i].charAt(0);  // 첫 번째 성격 유형
            char second = survey[i].charAt(1); // 두 번째 성격 유형
            int choice = choices[i];
            
            // choice 값이 4보다 크면 두 번째 성격 유형에 점수, 4보다 작으면 첫 번째 성격 유형에 점수
            if (choice > 4) {
                map.put(second, map.get(second) + (choice - 4));
            } else if (choice < 4) {
                map.put(first, map.get(first) + (4 - choice));
            }
        }
        
        // 각 성격 유형 쌍에서 더 높은 점수를 가진 성격 유형을 결과에 추가
        for (char[] key : keyArr) {
            if (map.get(key[0]) >= map.get(key[1])) {
                result += key[0];
            } else {
                result += key[1];
            }
        }
        
        // 최종 성격 유형 결과 반환
        return result;
    }
}
728x90