본문 바로가기

코딩테스트/Programmers

[JAVA] 성격 유형 검사하기

< 풀이 >

import java.util.*;
class Solution {
    public String solution(String[] survey, int[] choices) {
        char arr[][]={{'R','T'},{'C','F'},{'J','M'},{'A','N'}};
        HashMap<Character,Integer> map=new HashMap<>();
        HashMap<Integer,Integer>score= new HashMap<>();
        
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[i].length;j++){
                map.put(arr[i][j],0);
            }
        }
        
        //선택에 따른 점수 저장
        int num=3;
        for(int i=1;i<=7;i++){
            if(i<4){
                score.put(i,num);
                num--;
            }
            else {
                score.put(i,num);
                num++;
            }
        }
        
        for(int i=0;i<survey.length;i++){
            char c1=survey[i].charAt(0);
            char c2=survey[i].charAt(1);
            
            if(choices[i]<5){
                map.put(c1, map.get(c1) + score.get(choices[i]));
            }
            else{
                map.put(c2, map.get(c2) + score.get(choices[i]));
            }
        }
        
        String answer = "";
        for(int i=0;i<arr.length;i++){
            Arrays.sort(arr[i]);//오름차순 정렬
            
            int score1=map.get(arr[i][0]);
            int score2=map.get(arr[i][1]);
            
            if(score1>=score2)
                answer+=arr[i][0];
            else
                answer+=arr[i][1];
        }
        return answer;
    }
}

 

 

✏️ 풀이 과정

 

1. 지표별 성격 유형을 char 형 2차원 배열 arr 에 저장한다.

2. Hashmap 으로 선언한 map 에 성격 유형을 key 로 하여 점수를 저장한다. ( 처음에는 0으로 초기화 )

3. Hashmap 으로 선언한 score 에 choices 에 따른 점수를 저장한다. 

=> 1번: 3점, 2번: 2점, 3번: 1점, 4번: 0점, 5번: 1점, 6번: 2점, 7번: 3점 

4. survey 배열을 돌며 성격 유형별 점수를 계산한다.

=> ex) "AN" 이고 5번을 선택하였을 때: 번호가 5번(약간 동의) 를 선택하였으므로 네오형 1점을 얻게 된다. 

=> choices 의 값이 5 미만이면 문자열의 첫 문자에 해당하는 성격 유형의 값을 해당 점수만큼 증가시킨다. 

=> choices 의 값이 5 이상이면 문자열의 두 번째 문자에 해당하는 성격 유형의 값을 해당 점수만큼 증가시킨다. 

5. 점수에 따른 성격 유형을 구하기 위해 배열 arr 반복문을 돈다. 

: 같은 지표 내에서 두 성격 유형의 점수를 비교한다. ( 각 지표에서 더 점수가 높은 것이 성격 유형이다. )

: 같은 점수일 경우 사전순으로 빠른 성격 유형이 선택되므로 오름차순 정렬을 해준다.     

: 두 성격 유형 중 더 점수가 큰 값을 answer에 더해준다. ( 같은 점수일 경우 정렬을 했으므로 앞의 성격 유형의 값을 더해줌)

 

✍🏻 느낀점

 

이 문제를 예전에 풀려고 하다가 이해가 안돼서 그냥 넘어갔었는데, 이번에는 풀어내서 되게 뿌듯했다. 프로그래머스에서 계속 Hashmap을 사용하는 문제를 푸니까 익숙해지고, 여기저기 활용도 잘 하게 되었다. 맨날 내 실력이 제자리 걸음 같았는데 예전에 비해 문제 푸는 시간도 많이 줄고, 문제를 이해하는 속도도 좀 빨라지지 않았나 싶다. 내 착각일지 모르지만^.^ 그리고 이 문제는 채점하기 눌렀는데 바로 맞아서 더 기분이 좋았다. 오류 하나도 안나고 바로 맞은 건 처음인 것 같은데ㅎ 더 잘하고싶다. 

'코딩테스트 > Programmers' 카테고리의 다른 글

[JAVA] 완주하지 못한 선수  (1) 2024.06.08
[JAVA] 크레인 인형 뽑기 게임  (0) 2024.06.01
[JAVA] 바탕화면 정리  (0) 2024.05.27
[JAVA] 개인정보 수집 유효기간  (0) 2024.05.27
[JAVA] 신고 결과 받기  (0) 2024.05.23