성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP)

권 해·2023년 2월 9일

Algorithm

목록 보기
7/49

문제

코드

class Solution {
    public String solution(String[] survey, int[] choices) {
        StringBuilder stringBuilder=new StringBuilder();
        int[] score={0,-3,-2,-1,0,1,2,3};
        String[][] character={{"R","T"},{"C","F"},{"J","M"},{"A","N"}};
        int[][] result=new int[4][4];

        for(int i=0;i<survey.length;i++){
            String s=survey[i].split("")[1];
            int assign=score[choices[i]];
            for(int r=0;r<4;r++){
                for(int c=0;c<2;c++){
                    if(s.equals(character[r][c]))
                        result[r][c]+=assign;
                }
            }
        }
        for(int i=0;i<4;i++){
            if(result[i][0]>=result[i][1])
                stringBuilder.append(character[i][0]);
            else
                stringBuilder.append(character[i][1]);
        }

        return stringBuilder.toString();
    }
}

풀이

카카오 문제가 항상 신박해서 재미있는 것 같다.
이 문제는 어렵지 않게 해결할 수 있었다.
내가 생각한 방법은위와 같이 4X2의 2차원 배열에 미리 성격 유형을 입력해 두는 것이다.또한 이 유형들의 점수를 저장할 이차원 배열도 똑같이 만들어 준다.
선택 문항별 할당 점수 리스트도 미리 만들어 주었다.

그 후에, 받아온 성격유형 검사 결과로부터 성격유형 점수 리스트에 값들을 저장한다.
결과를 모두 저장 한 후에, 점수 결과 리스트에서 각 행별로 더 큰 점수를 가진 열을 선택하여 stringBuiler을 통해 성격유형을 이어 붙혀준다.

결과

베스트 코드와 비교해 보니 아이디어 자체는 크게 다르지 않았고, 성능 또한 비슷하게 측정되었다.
하지만, 내 코드에 3중 for문이 들어간다는 것이 나 스스로 맘에 들지 않았다. 나름대로 효율적으로 짠 코드라고 생각하지만, for문이 3개나 중첩되어 버리면 가독성이 떨어진다. 코드쓰는 스킬을 더 늘릴 필요가 있다.

출처 : 프로그래머스 코딩 테스트 연습 https://school.programmers.co.kr/learn/challenges

0개의 댓글