class Solution {
String mbti = "RTCFJMAN";
public String solution(String[] survey, int[] choices) {
int[] scores = new int[8];
StringBuilder answer = new StringBuilder();
for (int i=0;i<survey.length;i++) {
char c1 = survey[i].charAt(0);
char c2 = survey[i].charAt(1);
int score = choices[i];
if (score > 4 ) {
scores[mbti.indexOf(c2)] += score-4;
} else if (score < 4) {
scores[mbti.indexOf(c1)] += 4 - score;
}
}
for (int i=0;i<8;i+=2) {
if (scores[i] >= scores[i+1]) {
answer.append(mbti.charAt(i));
} else {
answer.append(mbti.charAt(i+1));
}
}
return answer.toString();
}
}
🤔
indexOf()
를 이용하면 비교적 수월하게 풀 수 있는 문제입니다.
먼저 mbti라는 변수에 "RTCFJMAN"를 넣어줍니다. 그리고
int[] scores = new int[8];
를 생성해줍니다. 이를 이용하면 해당 위치 값에 score를 쉽게 넣어줄 수 있습니다.
예를 들어서 RT에서 T에 3을 더해주고 싶다면 socres의 2번째 배열에 값을 더해주는 방식입니다.
for문
을 통해 각 survey를 변수에 넣어주고 score를 확인합니다. 이 대 score가 4를 넘어가면 첫번째 c1에 score-4를 넣어줍니다. 반대로는 4-score를 넣어줍니다. 이 때 indexOf를 통해 해당 배열의 위치값을 찾아내서 풀었습니다. (4보다 작을 경우 4-socre를 넣어주어야 합니다. 여기서 시간을 많이 잡아먹었네요...)모든 계산이 끝나고 나면 위에서 계산한 socre를 2개씩 짝지어 비교합니다. 값이 같은 경우에는 사전순으로 계산하라고 하였는데 이미 위에서 mbti에 사전순으로 설정해놓았기에 >= 일 경우에는 첫 번째 char를 넣어주면 됩니다.
답을 반환합니다.
🥳위 방법외에도 map을 이용하셔서 풀 경우에도 비슷하게 푸실 수 있습니다.(getOrDefault()메소드를 이용하신다면 쉽게 풀립니다.)
출처 : 프로그래머스 - 성격 유형 검사하기