나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
- 1번 지표: 라이언형(R), 튜브형(T)
- 2번 지표: 콘형(C), 프로도형(F)
- 3번 지표: 제이지형(J), 무지형(M)
- 4번 지표: 어피치형(A), 네오형(N)
4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
매우 비동의
비동의
약간 비동의
모르겠음
약간 동의
동의
매우 동의
검사 결과는 모든 질문의 성격 유형 점수를 더하여 각 지표에서 더 높은 점수를 받은 성격 유형이 검사자의 성격 유형이라고 판단합니다. 단, 하나의 지표에서 각 성격 유형 점수가 같으면, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 검사자의 성격 유형이라고 판단합니다.
질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어집니다. 이때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return 하도록 solution 함수를 완성해주세요.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
HashMap<String,Integer> map = new HashMap<>();
for(int i=0;i<survey.length;i++) {
int c = choices[i];
String a = survey[i].substring(0, 1);
String b = survey[i].substring(1,2);
/* getOrDefault(Object key, V DefaultValue)
* key : 값을 가져와야 하는 요소의 키
* defaultValue : 저장된 키로 매핑된 값이 없는 경우 반환되는 기본값
* map에 key가 존재하면 매핑된 값을 반환하고,
* 그렇지 않으면 매개변수로 받은 디폴트 값을 반환한다.*/
if(c<4) {
map.put(a, map.getOrDefault(a, 0)+(4-c));
} else if(c>4) {
map.put(b, map.getOrDefault(b, 0)+(c-4));
}
}
System.out.println(map);
List<String> list = new ArrayList<>();
list.add(map.getOrDefault("R",0)>=map.getOrDefault("T", 0)?"R":"T");
list.add(map.getOrDefault("C",0)>=map.getOrDefault("F", 0)?"C":"F");
list.add(map.getOrDefault("J",0)>=map.getOrDefault("M", 0)?"J":"M");
list.add(map.getOrDefault("A",0)>=map.getOrDefault("N", 0)?"A":"N");
for(String str:list) {
answer += str;
}
return answer;
}
}
정말 많이 헤맸다. 처음엔 int형으로 각 성격유형을 초기화해서 if문으로 점수를 받으려 했다.
그런데 survey[i].substring()과 이름이 같은 int 변수를 매칭시키는 데서 어려움을 겪어 아예 새로운 방식을 찾아야 했다.
이 과정에서 키:값으로 이루어진 Map을 이용하게 되었다.
문제를 풀며 컬렉션의 중요함과 배열의 차이점 및 쓰임새를 제대로 알아두어야겠다는 것을 느꼈다.
https://school.programmers.co.kr/learn/courses/30/lessons/118666
https://kim-oriental.tistory.com/18
https://technote-mezza.tistory.com/99