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

2025. 7. 21. 18:15·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

⭐아이디어

(012 3 456) index
 123 4 567  실제 번호
 321 0 123  번호에 따른 획득 점수

점수map을 만든다 1234567 에 대해 3210123을 만들자
-> map 말고 switch를 활용한 함수를 만들어도 될듯

- 코드구상

성격별 점수를 저장할 점수map을 만들고 값을 더해나가자

survey와 choices 기준으로 순회하자 (index 기준)
    index가 4일경우 넘어간다
    choices가 4보다 크면 char[1]에 4보다 작으면 char[0]에 해당 점수를 더해주자

StringBuilder를 만들고
(R T)(C F)(J M)(A N)로 된 배열을 만들어 순회하자
    저장된 두 점수를 비교해서 큰 값을 builder에 추가하자

💡풀이

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

class Solution {
    private int numberToPoint(int number) {
        return switch(number) {
            case 1 -> 3;
            case 2 -> 2;
            case 3 -> 1;
            case 4 -> 0;
            case 5 -> 1;
            case 6 -> 2;
            case 7 -> 3;
            default -> -1;
        };
    }

    public String solution(String[] survey, int[] choices) {

        Map<Character, Integer> scoreMap = new HashMap<>();
        for(int index = 0; index < survey.length; index++) {

            int choice = choices[index];
            if(choice == 4) {
                continue;
            }

            char c = choice < 4 ? survey[index].charAt(0) : survey[index].charAt(1);
            scoreMap.put(c, scoreMap.getOrDefault(c, 0) + numberToPoint(choice));
        }

        char[][] mbtis = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
        StringBuilder sb = new StringBuilder();

        for(char[] mbti : mbtis) {
            int x = scoreMap.getOrDefault(mbti[0], 0);
            int y = scoreMap.getOrDefault(mbti[1], 0);

            if(x == y) {
                Arrays.sort(mbti);
                sb.append(mbti[0]);
            } else {
                char c = x > y ? mbti[0] : mbti[1];
                sb.append(c);
            }
        }

        return sb.toString();
    }
}

 


📖새로 배운 부분

  • 자바 switch 문은 대부분 O(1)로 빠르게 동작함
  • 하지만 case가 복잡하거나 많으면 O(n)까지 느려질 수도 있음
  • 숫자형 switch는 보통 더 빠르고, String도 효율적으로 처리함

 

GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.

프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.

github.com

 

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 바탕화면 정리  (0) 2025.07.29
[프로그래머스, Java] 신규 아이디 추천  (0) 2025.07.29
[프로그래머스, Java][카카오 인턴] 키패드 누르기  (0) 2025.07.21
[프로그래머스, Java][PCCE 기출문제] 10번 / 데이터 분석  (0) 2025.07.21
[프로그래머스, Java] 크레인 인형뽑기 게임  (0) 2025.07.21
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 바탕화면 정리
  • [프로그래머스, Java] 신규 아이디 추천
  • [프로그래머스, Java][카카오 인턴] 키패드 누르기
  • [프로그래머스, Java][PCCE 기출문제] 10번 / 데이터 분석
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (110) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (17) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (78)
        • Programmers (78)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    switch
    json
    codingtest
    programmers
    StringTokenizer
    BufferedWriter
    java
    effectivejava
    CS
    BufferedReader
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 성격 유형 검사하기
상단으로

티스토리툴바