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

greenTea·2023년 8월 28일
0

코드

class Solution {
     String mbti = "RTCFJMAN";
    public  String solution(String[] survey, int[] choices) {
        int[] scores = new int[8];
        StringBuilder answer = new StringBuilder();
        for (int i=0;i<survey.length;i++) {

            char c1 = survey[i].charAt(0);
            char c2 = survey[i].charAt(1);
            int score = choices[i];

            if (score > 4 ) {
                scores[mbti.indexOf(c2)] += score-4;
            } else if (score < 4) {
                scores[mbti.indexOf(c1)] +=  4 - score;
            }
        }
        for (int i=0;i<8;i+=2) {
            if (scores[i] >= scores[i+1]) {
                answer.append(mbti.charAt(i));
            } else {
                answer.append(mbti.charAt(i+1));
            }
        }
        return answer.toString();
    }
}

풀이

🤔indexOf()를 이용하면 비교적 수월하게 풀 수 있는 문제입니다.

  1. 먼저 mbti라는 변수에 "RTCFJMAN"를 넣어줍니다. 그리고 int[] scores = new int[8];를 생성해줍니다. 이를 이용하면 해당 위치 값에 score를 쉽게 넣어줄 수 있습니다.
    예를 들어서 RT에서 T에 3을 더해주고 싶다면 socres의 2번째 배열에 값을 더해주는 방식입니다.

  2. for문을 통해 각 survey를 변수에 넣어주고 score를 확인합니다. 이 대 score가 4를 넘어가면 첫번째 c1에 score-4를 넣어줍니다. 반대로는 4-score를 넣어줍니다. 이 때 indexOf를 통해 해당 배열의 위치값을 찾아내서 풀었습니다. (4보다 작을 경우 4-socre를 넣어주어야 합니다. 여기서 시간을 많이 잡아먹었네요...)

  3. 모든 계산이 끝나고 나면 위에서 계산한 socre를 2개씩 짝지어 비교합니다. 값이 같은 경우에는 사전순으로 계산하라고 하였는데 이미 위에서 mbti에 사전순으로 설정해놓았기에 >= 일 경우에는 첫 번째 char를 넣어주면 됩니다.

  4. 답을 반환합니다.

🥳위 방법외에도 map을 이용하셔서 풀 경우에도 비슷하게 푸실 수 있습니다.(getOrDefault()메소드를 이용하신다면 쉽게 풀립니다.)

출처 : 프로그래머스 - 성격 유형 검사하기

profile
greenTea입니다.

0개의 댓글