본문 바로가기

알고리즘

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

구현문제입니다.

 

survey와 choice에 따라 어떤 사람이 점수를 얻는지를 판별하면 되는 문제입니다.

설문에 참여하는 사람은 8명으로 정해져 있습니다.

 

[구현 코드]

public class Solution {
    private static class Solution{

        // 순서대로 R ,T, F, C, M, J, A, N
        private static int[] count = new int[8];
        private static char[] arr = {'R', 'T', 'F','C', 'M', 'J', 'A', 'N'};

        private static int point(int value){
            if(value==1 || value==7){
                return 3;
            }else if(value==2 || value==6){
                return 2;
            }else{
                return 1;
            }
        }

        private static String solution(String[] survey, int[] choices){
            StringBuilder sb = new StringBuilder();

            for(int i=0; i< survey.length; i++){
                if(choices[i]==4) continue;
                String current = survey[i];
                int value = choices[i];

                if(current.equals("RT")){
                    if(value<4){
                        count[0] += point(value);
                    }else{
                        count[1] += point(value);
                    }
                }else if(current.equals("TR")){
                    if(value<4){
                        count[1] += point(value);
                    }else{
                        count[0] += point(value);
                    }
                }else if(current.equals("FC")){
                    if(value<4){
                        count[2] += point(value);
                    }else{
                        count[3] += point(value);
                    }
                }else if(current.equals("CF")){
                    if(value<4){
                        count[3] += point(value);
                    }else{
                        count[2] += point(value);
                    }
                }else if(current.equals("MJ")){
                    if(value<4){
                        count[4] += point(value);
                    }else{
                        count[5] += point(value);
                    }
                }else if(current.equals("JM")){
                    if(value<4){
                        count[5] += point(value);
                    }else{
                        count[4] += point(value);
                    }
                }else if(current.equals("AN")){
                    if(value<4){
                        count[6] += point(value);
                    }else{
                        count[7] += point(value);
                    }
                }else if(current.equals("NA")){
                    if(value<4){
                        count[7] += point(value);
                    }else{
                        count[6] += point(value);
                    }
                }
            }

            for(int i=0; i< count.length; i+=2){
                if(count[i]> count[i+1]){
                    sb.append(arr[i]);
                }else if(count[i]< count[i+1]){
                    sb.append(arr[i+1]);
                }else{
                    // 같을 때
                    int a = arr[i]-'A';
                    int b = arr[i+1]-'A';
                    if(a>b){
                        sb.append(arr[i+1]);
                    }else{
                        sb.append(arr[i]);
                    }
                }
            }

            return sb.toString();
        }
    }
}