본문 바로가기

알고리즘 문제풀이/프로그래머스 Level 1

[2022 KAKAO TECH INTERNSHIP/Java] 성격 유형 검사하기

# 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

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

programmers.co.kr

 

목차

 

내 풀이
import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        StringBuilder answer = new StringBuilder();
        Map<String, Integer> typeCountMap = new HashMap<>();
        String[] types = {"R", "T", "C", "F", "J", "M", "A", "N"};
        int[] scores = {3, 2, 1, 0, 1, 2, 3};
        
        // 1. 유형 카운트 초기화
        for (String type : types) {
            typeCountMap.put(type, 0);
        }
         
        for (int i=0; i<survey.length; i++) {
            String[] type = survey[i].split("");
            int choice = choices[i];
            int score = scores[choice-1];
            int typeI = choice < 4 ? 0 : 1;
            
            typeCountMap.put(type[typeI], typeCountMap.get(type[typeI]) + score);
        }
        
        // 2. 유형 선택
        for (int i=0; i<types.length; i=i+2) {
            String type1 = types[i];
            String type2 = types[i+1];
            int type1Count = typeCountMap.get(type1);
            int type2Count = typeCountMap.get(type2);
            
            if (type1Count >= type2Count) {
                answer.append(type1);
            } else {
                answer.append(type2);
            }
        }
        
        return answer.toString();
    }
}

 

프로그래머스 다른사람 풀이 참고 2 (Collections.sort) (altdmfk , 안효근 , leehj5898@gmail.com / 링크)
import java.util.HashMap;

class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer = "";
        char [][] type = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
        int [] score = {0, 3, 2, 1, 0, 1, 2, 3};
        HashMap<Character, Integer> point = new HashMap<Character, Integer>();

        // 점수 기록할 배열 초기화 
        for (char[] t : type) {
            point.put(t[0], 0);
            point.put(t[1], 0);
        }

        // 점수 기록 
        for (int idx = 0; idx < choices.length; idx++){
            if(choices[idx] > 4){
                point.put(survey[idx].charAt(1), point.get(survey[idx].charAt(1)) + score[choices[idx]]);
            } else {
                point.put(survey[idx].charAt(0), point.get(survey[idx].charAt(0)) + score[choices[idx]]);
            }
        }

        // 지표 별 점수 비교 후 유형 기입
        for (char[] t : type) {
            answer += (point.get(t[1]) <= point.get(t[0])) ? t[0] : t[1];
        }

        return answer;
    }
}