https://school.programmers.co.kr/learn/courses/30/lessons/118666
survey
의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA"
중 하나입니다.survey[i]
의 첫 번째 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.survey[i]
의 두 번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형을 의미합니다.R,T,C,F,J,M,A,N
을 선언scoring()
실시result()
를 통해 결과 리턴choice
의 값이 4 이상이면 1번째 char에 해당하는 변수에 + choice-4
choice
의 값이 4 이하면 1번째 char에 해당하는 변수에 + 4-choice
덧셈 연산은 oneElement()
에서 수행
switch - case 문을 통해 연산 수행
R / T 변수의 값들을 비교해 answer
에 append
이때 >=
을 사용해서 값이 동일할 경우 사전 상 앞에 있는 글자를 사용함
class Solution {
int R,T,C,F,J,M,A,N = 0; // 성격 유형 변수들
public String solution(String[] survey, int[] choices) {
for (int i = 0 ; i<choices.length ; i++){
scoring(survey[i],choices[i]); // 루프를 돌며 연산 수행
}
return result(); // 결과 리턴
}
public void scoring(String survey, int choice){
if(choice > 4){ // 동의 관련 선택지 > 1번째 char에 가산
oneElement(survey.charAt(1),choice-4);
}else if(choice < 4){ // 비동의 관련 선택지 > 0번째 char에 가산
oneElement(survey.charAt(0),4-choice);
}
}
public void oneElement(char c, int plus){ // char 값에 따라 해당 변수에 +
switch (c){
case 'R':
R += plus;
break;
case 'T':
T += plus;
break;
case 'C':
C += plus;
break;
case 'F':
F += plus;
break;
case 'J':
J += plus;
break;
case 'M':
M += plus;
break;
case 'A':
A += plus;
break;
case 'N':
N += plus;
break;
}
}
public String result(){ // 결과 값 리턴을 위해 변수 비교, answer에 append
StringBuilder answer = new StringBuilder();
answer.append(R >= T ? "R" : "T");
answer.append(C >= F ? "C" : "F");
answer.append(J >= M ? "J" : "M");
answer.append(A >= N ? "A" : "N");
return answer.toString();
}
}
0.03ms ~ 0.31ms
테스트 1 〉 | 통과 (0.05ms, 75.3MB) |
---|---|
테스트 2 〉 | 통과 (0.04ms, 76.8MB) |
테스트 3 〉 | 통과 (0.03ms, 75.8MB) |
테스트 4 〉 | 통과 (0.03ms, 70.1MB) |
테스트 5 〉 | 통과 (0.05ms, 73.7MB) |
테스트 6 〉 | 통과 (0.05ms, 74.3MB) |
테스트 7 〉 | 통과 (0.05ms, 75.3MB) |
테스트 8 〉 | 통과 (0.04ms, 77.2MB) |
테스트 9 〉 | 통과 (0.06ms, 71.7MB) |
테스트 10 〉 | 통과 (0.06ms, 78MB) |
테스트 11 〉 | 통과 (0.05ms, 74.7MB) |
테스트 12 〉 | 통과 (0.09ms, 72.2MB) |
테스트 13 〉 | 통과 (0.17ms, 70.8MB) |
테스트 14 〉 | 통과 (0.20ms, 75.4MB) |
테스트 15 〉 | 통과 (0.22ms, 74.3MB) |
테스트 16 〉 | 통과 (0.31ms, 88.8MB) |
테스트 17 〉 | 통과 (0.27ms, 76.8MB) |
테스트 18 〉 | 통과 (0.30ms, 75.3MB) |
테스트 19 〉 | 통과 (0.25ms, 85.5MB) |
테스트 20 〉 | 통과 (0.24ms, 80MB) |
import java.util.HashMap;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
//2차원 배열로 문자 선언
char [][] type = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
// 가중치 선언
int [] score = {0, 3, 2, 1, 0, 1, 2, 3};
// MBTI 문자 - 가중치 쌍의 HashMap 선ㅅ언
HashMap<Character, Integer> point = new HashMap<Character, Integer>();
// 점수 기록할 hashMap 초기화
for (char[] t : type) {
point.put(t[0], 0);
point.put(t[1], 0);
}
// 점수 기록
for (int idx = 0; idx < choices.length; idx++){
if(choices[idx] > 4){
point.put(survey[idx].charAt(1), point.get(survey[idx].charAt(1)) + score[choices[idx]]);
} else {
point.put(survey[idx].charAt(0), point.get(survey[idx].charAt(0)) + score[choices[idx]]);
}
}
// 지표 별 점수 비교 후 유형 기입
for (char[] t : type) {
answer += (point.get(t[1]) <= point.get(t[0])) ? t[0] : t[1];
}
return answer;
}
}
HashMap을 이용해 문자 - 값의 쌍을 만든 점이 인상 깊었다.
문자열을 배열로 선언해서 switch문 검사하는 코드를 줄일 수 있었다.