프로그래머스_성격유형 검사하기 (Map 활용)

권권·2023년 3월 20일
0

Java 예제🛒

목록 보기
8/14
post-thumbnail

프로그래머스_성격유형 검사하기 문제
https://school.programmers.co.kr/learn/courses/30/lessons/118666

해결방법
1. 일단 문제를 잘 이해하는 것이 중요하였다.
==> 처음에 문제를 이해하지 못해서 test-code 에 있는 것만 만족하는 정답을 만들었었다.
survey의 요소와 choices 의 관계를 파악하자.

  1. map 을 먼저 만들어 놓고 진행
    성격 요소별로 map을 만들어서 진행하자. 이때, map("RT", 0) 와 같이 하는것이 아니라
    각 성격 유형이기 때문에 map('R' , 0) 와 같은 방식으로 구성해놓는다.

  2. 문제에 있는 요소들을 재정의 하는 것이 필요하였다.
    choices 의 요소들은 1 ~ 7 까지 있지만, 순수하게 점수를 나타내는 것이 아니라 1~3번은 비동의를 나타내며 그것과 대응되는 성격유형이 따로 있다. 그렇기 때문에 실제 정답을 만들 때는 choices 의 성격을 이해하고 가공해줘야한다.

코드

import java.util.HashMap;
class Solution {
    public String solution(String[] survey, int[] choices) {
        // 정답이 될 값 초기화
        String answer = "";
        
        // 성격유형을 넣어줄 맵 생성하고 넣어줌
        HashMap<Character, Integer> map = new HashMap<>();
        
        // 성격유형별로 map을 만들어준다. (Key = 성격유형 , Value = 얻은 점수)
        map.put('R', 0);
        map.put('T', 0);
        map.put('C', 0);
        map.put('F', 0);
        map.put('J', 0);
        map.put('M', 0);
        map.put('A', 0);
        map.put('N', 0);
        
        // survey 만큼 for 문을 돌리고 for 문의 결과는
        // 각 성격유형마다 maping 된 key 에 결과를 더해준다.
        for(int i = 0 ; i < survey.length ; i++){
            // choices 에 대한 이해가 있어야하는 부분
            // choices 가 4보다 크다면, choices -4 를 해서 들어갈 수 있도록 한다.
            // -4 를 해줘야 각 성격유형에 양수로 대응 시킬 수 있음 
            if(choices[i] > 4){
                map.put(survey[i].charAt(1) , map.get(survey[i].charAt(1)) + choices[i] - 4);
            // choices 가 4보다 작다면, 4 - choices 를 해서 들어갈 수 있도록 한다.
            // 4 - choices 를 해줘야 각 성격유형에 양수로 대응 시킬 수 있음 
            }else if(choices[i] < 4){
                map.put(survey[i].charAt(0) , map.get(survey[i].charAt(0)) + 4 - choices[i]);
            }
        }
        
        // map.get('성격유형') 을 활용해서 성격유형에 대응되는 Key 값을 호출한다. 
        if (map.get('R') >= map.get('T'))
            answer = "R";
        else
            answer = "T";

        if (map.get('C') >= map.get('F'))
            answer += "C";
        else
            answer += "F";

        if (map.get('J') >= map.get('M'))
            answer += "J";
        else
            answer += "M";

        if (map.get('A') >= map.get('N'))
            answer += "A";
        else
            answer += "N";
        
        return answer;
        
    }
}
profile
안녕하세요

0개의 댓글