말하는 컴공감자의 텃밭

프로그래머스 성격 유형 검사하기 - 자바(java) indexOf, Math.abs 본문

알고리즘/Programmers - Java

프로그래머스 성격 유형 검사하기 - 자바(java) indexOf, Math.abs

현콩 2023. 5. 27. 23:05
728x90

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

 

일단 제 mbti는 enfp입니다 껄껄

 

먼저 성격유형은 4종류로 각각 2개씩 반대되는 성향이 존재합니다.

선택지 (1~7)와, 검사지 질문에 따라 점수를 받는 성향이 달라집니다.

매우 비동의 (1) 을 선택하는 경우와 매우 동의 (7)을 선택하는 경우 역시 3점입니다. 점수를 받는 유형은 다르지만요

 

예를 들어  AN이 질문이고, 5의 점수를 준다면 N이 1점의 점수를 얻게 됩니다.

반대로 NA이 질문이고 2의 점수라면 N이 2점을 얻게 됩니다.

 

결국 점수의 숫자에 따라서 앞에 성향에 점수를 주거나 뒤에 점수를 주게 되는 방식으로 문제를 접근했습니다.

점수는 모든 항목에서 4를 빼서 절댓값을 하면 되겠죠.

 

앞과 뒤 구별은 survey[i].charAt(0) 와 (1)로 구분했으며,

                                                               indexOf()를 통해서 types에 담긴 문자의 위치에 점수를 저장했습니다.

절댓값은 Math.abs 메서드를 사용했습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer = "";
        String types = "RTCFJMAN"// 먼저 타입 정의
        int [] scores = new int[types.length()];
 
        for(int i = 0; i < choices.length; i++){
            if(choices[i] < 4){ // 점수가 4점 이하면 AN의 경우 A가 점수를 얻는 구조 -4 후 절대값
                scores[types.indexOf(survey[i].charAt(0))] += Math.abs(choices[i] - 4);
            }else if(choices[i] > 4){ // 4점 이상이면 N이 점수를 얻는다.
                scores[types.indexOf(survey[i].charAt(1))] += Math.abs(choices[i] - 4);
            }
        }
        for (int i = 0; i < scores.length-1; i+=2){ // 높은 점수의 성격유형을 answer에 담는다.
            if(scores[i] < scores[i+1]){
                answer = answer + types.charAt(i+1);
            }else answer += types.charAt(i);
        }
        
        return answer;
    }
}
cs

중간에 구성을 잘못해서 고생했는데..

 

노가다 결과는 1점..

 

ㅠㅠ 1점짜리 쉬운 문제였네요 단순 노가다문제는 이런 배점이 큰 것 같습니다.

HashMap() 이용

HashMap을 이용해서 저와 같은 점수배점으로 점수를 입력하는 방식도 기억에 남아서 올립니다.

728x90
Comments