본문 바로가기
Algorithm

프로그래머스 <성격 유형 검사>

by seungh2 2023. 1. 2.

프로그래머스 <성격 유형 검사>

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

 

프로그래머스

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

programmers.co.kr


성격 유형 검사

나만의 카카오 성격 유형 검사지를 만들려고 합니다. 

성격 유형 검사는 4개 지표로 성격 유형을 구분하며, 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.

검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.

각 질문은 1가지 지표로 성격 유형 점수를 판단합니다. 또한 질문에 따라 각 유형이 동의인지 비동의인지 주어집니다.

만약 점수가 같을 경우, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 선택합니다.


문제해결

이 문제는 index 처리를 잘 하면 간단하게 풀 수 있다.

 

성격 유형을 key로 해당 유형의 점수를 value로 하는 HashMap을 만들어서 점수를 누적해두었다.

index 처리는 아래와 같이 코드를 구현해 점수를 구하는데 사용하였다.

점수가 같을 경우에는 두 성격 유형 중 사전 순으로 빠른 것을 고르기 때문에 

성격 유형을 구할 때, 사전 순으로 빠른 것으로 초기화해두고, 사전 순으로 느린 것이 더 점수가 높다면 바꿔주는 식으로 구현하였다.


코드

import java.util.*;
class Solution {
    public String solution(String[] survey, int[] choices) {
        char[] type = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
        
        HashMap<Character, Integer> hm = init(type);
        int size = survey.length;
        for(int i = 0; i < size; i++){
            // 비동의인 경우
            if(choices[i] < 4){
                char ch = survey[i].charAt(0);
                hm.put(ch, hm.get(ch) + (4-choices[i]));
            }else if(choices[i] == 4){	// 모르겠음인 경우
                continue;
            }else{  // 동의인 경우
                char ch = survey[i].charAt(1);
                hm.put(ch, hm.get(ch) + choices[i] -4);
            }
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < 4; i++){
            char ch = type[i*2];
            if(hm.get(type[i*2+1]) > hm.get(type[i*2])){
                ch = type[i*2+1];
            }
            sb.append(ch);
        } 
        return sb.toString();
    }
    static HashMap<Character, Integer> init(char[] type){
        HashMap<Character, Integer> hm = new HashMap<>();
        for(int i = 0; i < type.length; i++){
            hm.put(type[i], 0);
        }
        return hm;
    }
}

결과


 

728x90

'Algorithm' 카테고리의 다른 글

백준 1446번 <지름길>  (0) 2023.04.23
백준 13335번 <트럭>  (0) 2023.01.17
프로그래머스 <게임 맵 최단거리>  (0) 2023.01.01
백준 1303번 <전쟁-전투>  (0) 2022.12.27
[프로그래머스] 프린터  (0) 2022.12.16

댓글