코딩테스트/프로그래머스

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

GAEBAL 2022. 8. 23. 14:12
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

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

programmers.co.kr

 

 

풀이

레벨 1이라 그런지 어렵지 않은 문제였음

문제를 오랜만에 풀어서 무슨 함수가 있고 하는걸 까먹었음.... ㅎ

그래서 Character 형 ArrayList에다가 'R', 'T', 'C' , ... 얘네들을 다 추가해서 .indexOf() 함수를 사용했는데 그럴 필요없이 그냥 "RTCFJMAN" 문자열에다가 .indexOf() 함수써도 되는거였음

 

암튼 그렇게 풀고 풀이를 더 찾아봤는데 훨씬 쉬운 풀이가 있었음.

[자바] 프로그래머스 - 성격 유형 검사하기 (Lv1, Java) - Nahwasa

 

[자바] 프로그래머스 - 성격 유형 검사하기 (Lv1, Java)

문제 : Programmers-성격 유형 검사하기 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 개념 문자열 파싱 survey의 문자열을 파싱해야 점수 체크가 가..

nahwasa.com

이 풀이에서는 int[] cnt = new int['Z'-'A'+1]; 이렇게 점수를 기록할 배열을 크기 26으로 만들어서 해당 유형에 해당하는 점수를 +해줌 이렇게 하면 나처럼 귀찮게 마지막에 answer에 문자열 추가할 떄 노가다 안해도 됨!

 

20분 정도 걸렸는데 더 쉽게 푸는 방법을 생각하고 문제 풀기 시작하는 습관을 들여야겠음 ㅎㅎㅎ

 

 

자세한건 주석으로 !

 

 

코드

// 코딩테스트 연습 - 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기
// https://school.programmers.co.kr/learn/courses/30/lessons/118666

package PROGRAMMERS.level1;

import java.util.ArrayList;

public class Num118666_성격유형검사하기 {
    // 1. R, T
    // 2. C, F
    // 3. J, M
    // 4. A, N

    private static class Solution {
        private String solution(String[] survey, int[] choices) {
            ArrayList<Character> charArrayList = new ArrayList<Character>();
            charArrayList.add('R');
            charArrayList.add('T');
            charArrayList.add('C');
            charArrayList.add('F');
            charArrayList.add('J');
            charArrayList.add('M');
            charArrayList.add('A');
            charArrayList.add('N');
            int[] score = new int[8]; // 성격 유형 당 점수를 저장할 배열

            for (int i = 0; i < survey.length; i++) {
                String temp = survey[i];
                int option = choices[i];

                // 해당 성격 유형에 점수 + 해주기
                // 1이면 [0] += 3, 2이면 [0] += 2, 3이면 [0] += 1,
                // 4이면 넘어가고,
                // 5이면 [1] += 1, 6이면 [1] += 2, 7이면 [1] += 3
                switch (option) {
                    case 1:
                        score[charArrayList.indexOf(temp.charAt(0))] += 3;
                        break;
                    case 2:
                        score[charArrayList.indexOf(temp.charAt(0))] += 2;
                        break;
                    case 3:
                        score[charArrayList.indexOf(temp.charAt(0))] += 1;
                    case 4:
                        break;
                    case 5:
                        score[charArrayList.indexOf(temp.charAt(1))] += 1;
                        break;
                    case 6:
                        score[charArrayList.indexOf(temp.charAt(1))] += 2;
                        break;
                    case 7:
                        score[charArrayList.indexOf(temp.charAt(1))] += 3;
                        break;
                }
            }

            String answer = "";

            if (score[0] >= score[1]) {
                answer += "R";
            } else {
                answer += "T";
            }

            if (score[2] >= score[3]) {
                answer += "C";
            } else {
                answer += "F";
            }

            if (score[4] >= score[5]) {
                answer += "J";
            } else {
                answer += "M";
            }

            if (score[6] >= score[7]) {
                answer += "A";
            } else {
                answer += "N";
            }

            return answer;
        }
    }

    public static void main(String[] args) {
        Solution sol = new Solution();

        System.out.println(sol.solution(new String[]{"AN", "CF", "MJ", "RT", "NA"},
                new int[]{5, 3, 2, 7, 5}));
        System.out.println(sol.solution(new String[]{"TR", "RT", "TR"},
                new int[]{7, 1, 3}));
    }
}
728x90