본문 바로가기
알고리즘 문제풀이/프로그래머스

[프로그래머스 2022 KAKAO TECH INTERNSHIP] 성격 유형 검사하기

by 선서니 2023. 6. 18.

[문제 바로가기]👇

 

프로그래머스

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

programmers.co.kr

떡떡구덩ㅇ없다

최근 지락실2 보다가 너무 재밌어서 지락실1도 정주행 중이었는데 문제 풀다가 이거 밖에 생각이 안났다ㅌㅋㅋㅋㅋ

 

 

💡풀이💡

1. 지표 번호 별 성격 유형 저장 배열 생성

  •  마지막 성격 유형 결과를 지표 번호 순서대로 return 해야하기 때문에 지표 번호 별로 성격 유형을 저장했다.
  • 그리고 조건 중 하나가 설문조사 결과 점수가 같은 성격 유형은 사전 순으로 빠른 걸 return 하도록 해야하기 때문에 알파벳 순서대로 저장했다.

2. 성격 유형 별 점수 저장 map 생성

3. 설문조사 점수 계산

4. 성격 유형 결과 계산

 

 

전체 코드

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

class Solution {
    public String solution(String[] survey, int[] choices) {
        
        char[][] type = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}}; // 지표 변호 별 성격 유형 저장 :: 각 지표 별로 알파벳 순서로 저장  
        Map<Character, Integer> score = new HashMap<>(); // 성격 유형 : 설문조사 점수 저장 map
        for(int i=0; i<type.length; i++) { // map 초기화
            char[] t = type[i];
            score.put(t[0], 0);
            score.put(t[1], 0);
        }
        
        // 설문조사 점수 계산
        calScore(score, survey, choices);       
        
        // 성격유형 계산
        return getResult(score, type);
    }
    
    public void calScore(Map<Character, Integer> score, String[] survey, int[] choices) {
        int[] scores = {0, 3, 2, 1, 0, 1, 2, 3};
        
        for(int i=0; i<survey.length; i++) {
            char notAgree = survey[i].charAt(0);
            char agree = survey[i].charAt(1);
            
            if(choices[i] < 4) score.put(notAgree, score.get(notAgree) + scores[choices[i]]);
            else score.put(agree, score.get(agree) + scores[choices[i]]);
        }
    }
    
    public String getResult(Map<Character, Integer> score, char[][] type) {
        String result = "";
        for(int i=0; i<type.length; i++) {
            char[] t = type[i];
            result += (score.get(t[1]) <= score.get(t[0]) ? t[0] : t[1]); // 걊이 같으면 알파벳 순서가 빠른 t[0]이 저장될 수 있도록
        }
        
        return result;
    }
}

 

댓글