알고리즘/PROGRAMMERS
성격 유형 검사하기(Lv.1)
현대타운301
2024. 3. 21. 00:57
문제 설명
입출력 예시
요약
4가지 질문 유형에 따른 점수를 계산해서 성격유형 return
풀이
문제 해석
알파벳 순서와 점수에 따라 나눠서 계산하기
접근 방식
1. 질문 유형을 2개로 나누기
→ [ RT, CF, MJ, AN ] -> [ R, T, C, F, M, J, A, N ]
2. 점수에 따라 각 알파벳에 해당하는 값 증가
→ RT 7의 경우: T + 3
3. 알파벳 순서 고려
→ 만약 R과 T의 점수가 같은 경우 R 선택
코드리뷰
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
HashMap<String, Integer> map = new HashMap<>();
String[] arr = {"R", "T", "C", "F", "M", "J", "A", "N"}; // 각 질문 항목을 개별로 나누기
for(String str : arr) {
map.put(str, 0); // 0으로 초기화
}
for(int i = 0; i < choices.length; i++) {
int score = choices[i];
String str1 = String.valueOf(survey[i].charAt(0));
String str2 = String.valueOf(survey[i].charAt(1));
if(score > 4) { // 5, 6, 7점에 대한 처리(뒤에 해당하는 문자의 value를 각각 +1, +2, +3)
map.put(str2, map.getOrDefault(str2, 0) + choices[i]-4);
} else if(score == 1) { // 1점이라면 '매우 비동의'에 해당하므로 앞에 문자에 해당하는 value + 3
map.put(str1, map.getOrDefault(str1, 0) + 3);
} else if(score == 2) { // 2점은 앞에 문자 value +2
map.put(str1, map.getOrDefault(str1, 0) + 2);
} else if(score == 3) { // 3점은 앞에 문자 value +1
map.put(str1, map.getOrDefault(str1, 0) + 1);
}
}
System.out.println(map);
String answer = "";
if(map.get("R") >= map.get("T")) { // R점수와 T점수를 비교(같으면 알파벳 순으로 리턴)
answer += "R";
} else {
answer += "T";
}
if(map.get("C") >= map.get("F")) { // C점수와 F점수를 비교(같으면 알파벳 순으로 리턴)
answer += "C";
} else {
answer += "F";
}
if(map.get("J") >= map.get("M")) { // J점수와 M점수를 비교(같으면 알파벳 순으로 리턴)
answer += "J";
} else {
answer += "M";
}
if(map.get("A") >= map.get("N")) { // A점수와 N점수를 비교(같으면 알파벳 순으로 리턴)
answer += "A";
} else {
answer += "N";
}
return answer;
}
}