알고리즘

프로그래머스 성격 유형 검사하기(JAVA)

박카스마시며코딩 2022. 9. 1. 17:12

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

 

프로그래머스

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

programmers.co.kr

 

저는 구현을 통해 문제를 해결하였습니다.

choices에 중간 값을 빼고 음수인지 양수인지에 따라 앞에 점수를 부여하거나 뒤에 점수를 부여하였습니다.

결과를 도출할 때는 PERSONALITY_TYPE을 돌면서 비교하여 점수를 비교하여 결과를 도출하였습니다.

PERSONALITY_TYPE을 초기화할 때 알파벳 순서대로 넣어놨기에 둘의 점수가 같다면 앞에 것을 결과로 도출하였습니다.

 

import java.util.*;
class Solution {
    private static final char[][] PERSONALITY_TYPE = {{'R','T'},{'C','F'},{'J','M'},{'A','N'}};
    private static final int HALF_SCORE = 4;
    public String solution(String[] survey, int[] choices) {
        Map<Character,Integer> score = new HashMap<>();
        for(int i = 0 ; i < survey.length ; i++){
            String str = survey[i];
            int choice = choices[i];
            cal(score,str,choice);
        }
        String answer = "";
        answer = makeResult(score);
        return answer;
    }
    private static String makeResult(Map<Character,Integer> score) {
        StringBuilder sb = new StringBuilder();
        for(char[] chArray : PERSONALITY_TYPE){
            int prevScore = score.getOrDefault(chArray[0], 0);
            int nextScore = score.getOrDefault(chArray[1], 0);
            if(prevScore >= nextScore){
                sb.append(chArray[0]);
            }else{
                sb.append(chArray[1]);
            }
        }
        return sb.toString();
    }
    private static void cal(Map<Character,Integer> score, String str,int choice){
        char prev = str.charAt(0);
        char next = str.charAt(1);
        int nowScore = choice - HALF_SCORE;
        if(nowScore < 0){
            score.merge(str.charAt(0),Math.abs(nowScore),(v1,v2)-> v1 + Math.abs(nowScore));
        }else if(nowScore > 0){
            score.merge(str.charAt(1),Math.abs(nowScore),(v1,v2)-> v1 + Math.abs(nowScore));
        }
    }
}