



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