개발 창고/Algorithm

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

로이제로 2024. 4. 3. 08:00
반응형


  • 문제
  • 풀이

문제

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

 

프로그래머스

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

programmers.co.kr

문제 내용은 지적 재산 보호 차원에서 가져오지 않고 풀이만 공유드리도록 하겠습니다.


풀이

 제 풀이가 무조건적으로 맞는 것도 최적의 답변도 아니지만, 이런 풀이도 있다는 차원에서 작성해 보며, 좀 더 나은 방법이 있다면 이야기해 주셔도 도움 될 것 같습니다.

import java.util.HashMap;

class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer   = "";
        int midScore    = 4;    // 기준점수
        
        // 유형별 점수
        HashMap<Character, Integer> map = new HashMap<>();
        // 1번 지표
        map.put('R', 0);    // 라이언형
        map.put('T', 0);    // 튜브형
        // 2번 지표
        map.put('C', 0);    // 콘형
        map.put('F', 0);    // 프로도형
        // 3번 지표
        map.put('J', 0);    // 제이지형
        map.put('M', 0);    // 무지형
        // 4번 지표
        map.put('A', 0);    // 어피치형
        map.put('N', 0);    // 네오형
        
        for(int idx = 0; idx < survey.length; idx++){
            String type = survey[idx];
            int choice  = choices[idx];
            
            // Cond. 비동의인 경우
            if(choice < midScore){
                char ch     = type.charAt(0);
                int score   = midScore - choice;
                // System.out.println(ch + " " + score);
                map.put(ch, map.get(ch) + score); 
            // Cond. 동의인 경우
            }else if(choice > midScore){
                char ch     = type.charAt(1);
                int score   = choice - midScore;
                // System.out.println(ch + " " + score);
                map.put(ch, map.get(ch) + score);
            }
        }
        
        // 1번 지표
        // 튜브형(T) 점수가 높은 경우
        if(map.get('R') < map.get('T'))     answer += "T";
        // 라이언형(R) 점수가 높거나 동일한 경우(사전순)
        else                                answer += "R";
        
        // 2번 지표
        // 프로도형(F) 점수가 높은 경우
        if(map.get('C') < map.get('F'))     answer += "F";
        // 콘형(C) 점수가 높거나 동일한 경우(사전순)
        else                                answer += "C";
        
        // 3번 지표
        // 무지(M) 점수가 높은 경우
        if(map.get('J') < map.get('M'))     answer += "M";
        // 제이지형(J) 점수가 높거나 동일한 경우(사전순)
        else                                answer += "J";
        
        // 4번 지표
        // 네오형(N) 점수가 높은 경우
        if(map.get('A') < map.get('N'))     answer += "N";
        // 어피치형(A) 점수가 높거나 동일한 경우(사전순)
        else                                answer += "A";
        
        return answer;
    }
}

코드 실행 결과
제출 결과

 

반응형

'개발 창고 > Algorithm' 카테고리의 다른 글

[프로그래머스] 숫자 짝궁 - JAVA  (59) 2024.03.22
[백준] 1004 어린 왕자 - JAVA  (52) 2024.03.20
[백준] 1003번 피보나치 함수 - JAVA  (32) 2024.03.19
[백준] 1002번 터렛 - JAVA  (40) 2024.03.18
[백준] 1001번 A - B - JAVA  (45) 2024.03.15