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

byeol·2023년 3월 24일
0

접근 (맞은문제)

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

이 문제는 Map을 활용해서 구현하면 된다.
각 성격을 Map의 key로
각 성격의 대한 설문조사 결과를 Map의 value로 누적한다.

마지막에 성격유형에 따라 value값이 큰 성격 유형이 선택된다.
단, 같은 경우 알파벳이 더 앞선 순서가 성격 유형으로 선택된다.

맞았지만 다른 사람의 풀이와 비교해본 결과
불필요한 코드가 많아서
내 코드와 다른 사람의 코드를 비교해서 올린다.

과정

  • Map에 성격 유형을 넣는다.
 result_sc.put('R',0);
 result_sc.put('T',0);
        
 result_sc.put('C',0);
 result_sc.put('F',0);
        
 result_sc.put('J',0);
 result_sc.put('M',0);
        
 result_sc.put('A',0);
 result_sc.put('N',0);
  • 설문조사의 결과값을 누적하는 과정을 메서드로 선언했다.
static int[] score={0,3,2,1,0,1,2,3};
static void makeServResult(String mb, int check){
        if(check<=3)
            result_sc.put(mb.charAt(0),result_sc.get(mb.charAt(0))+score[check]);  
        else   
            result_sc.put(mb.charAt(1),result_sc.get(mb.charAt(1))+score[check]);        
        
        
    }
  • 성격 유형을 정하는 것을 메서드로 선언했다.
 static void makeMbti(){
        
        for(int i=0;i<4;i++){
            if(result_sc.get(search[i][0])<result_sc.get(search[i][1])){
                sb.append(search[i][1]+"");
            }else if(result_sc.get(search[i][0])>result_sc.get(search[i][1])){
                sb.append(search[i][0]);
            }else{
                int a = (int)(search[i][0]);
                int b = (int)(search[i][1]);
                if(a>b) sb.append(search[i][1]);
                else sb.append(search[i][0]);
            }
        }//for              
    }

나의 풀이(java)

import java.util.*;
import java.io.*;

class Solution {
    
    
    static int[] score={0,3,2,1,0,1,2,3};
    
    static Map<Character,Integer> result_sc = new HashMap<>();;
    
    static StringBuilder sb = new StringBuilder();
    
    static char[][] search ={{'R','T'},{'C','F'},{'J','M'},{'A','N'}}; 
    
    public StringBuilder solution(String[] survey, int[] choices) {
        String answer = "";
        
        
        result_sc.put('R',0);
        result_sc.put('T',0);
        
        result_sc.put('C',0);
        result_sc.put('F',0);
        
        result_sc.put('J',0);
        result_sc.put('M',0);
        
        result_sc.put('A',0);
        result_sc.put('N',0);
        
           
        for(int i=0;i<survey.length;i++){
           makeServResult(survey[i],choices[i]);
        }
        
        makeMbti();
         
        return sb;
    }
    
    static void makeServResult(String mb, int check){
        if(check<=3)
            result_sc.put(mb.charAt(0),result_sc.get(mb.charAt(0))+score[check]);
            else    
            result_sc.put(mb.charAt(1),result_sc.get(mb.charAt(1))+score[check]);            
    }
    
    static void makeMbti(){
        
        for(int i=0;i<4;i++){
            if(result_sc.get(search[i][0])<result_sc.get(search[i][1])){
                sb.append(search[i][1]+"");
            }else if(result_sc.get(search[i][0])>result_sc.get(search[i][1])){
                sb.append(search[i][0]);
            }else{
                int a = (int)(search[i][0]);
                int b = (int)(search[i][1]);
                if(a>b) sb.append(search[i][1]);
                else sb.append(search[i][0]);
            }    
        }
               
    }
  
}

다른 사람의 간결한 풀이

  • 성격 유형을 정하는 메서드
static void makeMbti(){
             sb.append(result_sc.get('R')>=result_sc.get('T')?'R':'T');  
             sb.append(result_sc.get('C')>=result_sc.get('F')?'C':'F'); 
             sb.append(result_sc.get('J')>=result_sc.get('M')?'J':'M'); 
             sb.append(result_sc.get('A')>=result_sc.get('N')?'A':'N'); 
            
        }
profile
꾸준하게 Ready, Set, Go!

0개의 댓글