| 문제 | 레벨 | 정답률 |
|---|---|---|
| 성격 유형 검사하기 | Lv.1 | 51% |



import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
HashMap<Character, Integer> grades = new HashMap<>();
String result = "";
grades.put('R', 0);
grades.put('T', 0);
grades.put('F', 0);
grades.put('C', 0);
grades.put('M', 0);
grades.put('J', 0);
grades.put('A', 0);
grades.put('N', 0);
for(int i = 0; i<survey.length; i++){
char firstUnit = survey[i].charAt(0);
char secondUnit = survey[i].charAt(1);
int currentGrade1 = grades.getOrDefault(firstUnit, 0);
int currentGrade2 = grades.getOrDefault(secondUnit, 0);
switch(choices[i]){
case 1:
grades.put(firstUnit, currentGrade1+3);
break;
case 2:
grades.put(firstUnit, currentGrade1+2);
break;
case 3:
grades.put(firstUnit, currentGrade1+1);
break;
case 5:
grades.put(secondUnit, currentGrade2+1);
break;
case 6:
grades.put(secondUnit, currentGrade2+2);
break;
case 7:
grades.put(secondUnit, currentGrade2+3);
break;
}
}
if(grades.get('R') >= grades.get('T')){
result += "R";
} else{
result += "T";
}
if(grades.get('C') >= grades.get('F')){
result += "C";
} else{
result += "F";
}
if(grades.get('J') >= grades.get('M')){
result += "J";
} else{
result += "M";
}
if(grades.get('A') >= grades.get('N')){
result += "A";
} else{
result += "N";
}
return result;
}
}
키-값 쌍으로 저장이 가능한 HashMap을 통해 모든 성격 유형을 키로 넣고 값을 0으로 초기화
각 survey의 첫 유형과 두 번째 유형을 각각 변수로 저장하고, 해당 변수의 현재 점수 역시 변수로 각각 저장
choices 점수에 따라서 해시맵의 점수 update
각 유형별로 높은 점수를 기준으로 result에 추가
같으면 사전 순으로 판별
import java.util.HashMap;
public class Solution {
public String solution(String[] survey, int[] choices) {
HashMap<Character, Integer> grades = new HashMap<>();
grades.put('R', 0);
grades.put('T', 0);
grades.put('F', 0);
grades.put('C', 0);
grades.put('M', 0);
grades.put('J', 0);
grades.put('A', 0);
grades.put('N', 0);
for (int i = 0; i < survey.length; i++) {
char firstUnit = survey[i].charAt(0);
char secondUnit = survey[i].charAt(1);
if (choices[i] >= 1 && choices[i] <= 3) {
grades.put(firstUnit, grades.get(firstUnit) + 4 - choices[i]);
}
if (choices[i] >= 5 && choices[i] <= 7) {
grades.put(secondUnit, grades.get(secondUnit) + choices[i] - 4);
}
}
StringBuilder result = new StringBuilder();
result.append(getBetterUnit(grades, 'R', 'T'));
result.append(getBetterUnit(grades, 'C', 'F'));
result.append(getBetterUnit(grades, 'J', 'M'));
result.append(getBetterUnit(grades, 'A', 'N'));
return result.toString();
}
private char getBetterUnit(HashMap<Character, Integer> grades, char unit1, char unit2) {
return grades.get(unit1) >= grades.get(unit2) ? unit1 : unit2;
}
}
반복을 충분히 피할 수 있는 코드였음에도 그렇게 구현하지 못한게 아쉬운 문제였다.
마지막 점수 산정 부분은 솔직히 함수로 만들려고 했으나 귀찮아서 놔둔 것도 맞긴 한데, 솔직히 점수 update하는 부분에서 연산을 통해 쉽게 추가할 점수를 계산하는 건 생각하지 못했다.
반복을 줄여 간결한 코드를 작성하는 것도 신경써서 문제를 풀어야겠다.