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

LeeYulhee·2023년 8월 21일
0

💻 문제 출처 : 프로그래머스_성격 유형 검사하기

👉 내가 작성한 답


import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        
        Map<Character, Integer> choicesMap = new HashMap<>();
        
        char[] type = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
        
        for(char c : type) {
            choicesMap.put(c, 0);
        }
        
        for(int i = 0; i < survey.length; i++) {
            
            int changeScore;
            
            if(choices[i] < 4) {
                changeScore = (choices[i] - 4) * - 1;
                choicesMap.put(survey[i].charAt(0), choicesMap.get(survey[i].charAt(0)) + changeScore);
            } else {
                changeScore = choices[i] - 4;
                choicesMap.put(survey[i].charAt(1), choicesMap.get(survey[i].charAt(1)) + changeScore);
            }
        }
        
        StringBuilder sb = new StringBuilder();
        
        for(int i = 0; i < type.length; i += 2) {
            char type1 = type[i];
            char type2 = type[i + 1];
            if(choicesMap.get(type1) >= choicesMap.get(type2)) {
                sb.append(type1);
            } else {
                sb.append(type2);
            }
        }
        
        return sb.toString();
    }
}

📌 문제 풀이 설명

  • Character를 키로 갖고 Integer를 값으로 갖는 Map 생성
  • char 배열인 type을 선언하고 성격 유형들을 넣어 생성
  • 향상된 for문으로 type 요소를 순회
    • choiceMap에 type을 키로, 0을 값으로 넣음
  • for문으로 0부터 survey의 길이 미만까지 1씩 증가하며 순회
    • int 변수 changeScore를 선언
    • 만약 choices[i]가 4 미만이면
      • changeScore에 choices[i] - 4를 계산해준 뒤 - 1을 곱해 양수로 만들어 줌
        • 그럼 1 → 3점, 2 → 2점, 3 → 1점이 됨
      • choicesMap에 survey의 첫 글자를 키로, survey의 첫 번째 글자를 키로 넣었을 때 나온 값에 + changeScore를 해서 put
    • 그렇지 않다면
      • changeScore에 choices[i] - 4한 값을 대입
        • 그럼 7 → 3점, 6 → 2점, 5 → 1점이 됨
      • choicesMap에 survey의 뒷 글자를 키로, survey의 뒷 글자를 키로 넣었을 때 나온 값에 + changeScore를 해서 put
  • StringBuilder를 생성
  • for문으로 0부터 type의 길이 미만까지 2씩 증가하며 순회
    • char 변수 type1에 type[i], type2에 type[i+1]을 대입
    • 만약 choiceMap에서 type1에 해당하는 값이 type2에 해당하는 값보다 크면
      • StringBuilder에 type1 추가
    • 그게 아니면
      • StringBuilder에 type2 추가
  • 위의 과정이 끝나면 sb를 String으로 변환해서 return
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글