내 풀이
이 문제는 성격유형의 가짓수가 많아서 그걸 어떻게 가독성 좋게 정리해가며 코드를 짜야 할까 고민이 많이 되었던 문제다
처음엔 각 유형별로 해당 유형명을 변수명으로 가지는 int형 변수를 생성해볼까도 싶었는데 아무래도 나중에 실제 점수를 기록해야 할 때 하나하나 어떤 변수에 넣어주어야 하는지 switch문 등 처리를 해줘야할 일이 많아질 것 같았다
그래서 결국 HashMap
을 써서 풀어보기로 가닥을 잡았다
처음 HashMap의 키값에 각 유형의 이름을 넣고 초기화해주는 것 부터 고민이 많이 되었다
보기에 간결하다고 생각되는 건 char형 배열에 각 유형의 이름을 싹 저장해두고 for문으로 해당 배열을 돌면서 HashMap의 키로 넣어줘버리는 건데..
이 배열은 여기서밖에 쓰이지 않을거라 굳이 메모리 차지를 하도록 만들 이유 또한 없었다
그래서 마음엔 조금 안들지만 결국 하나하나 키값을 지정해주는 형태로 진행을 하게 되었다
그 다음엔 for문으로 survey의 크기만큼 루프를 돌면서
choices[i]의 값이 4이상이면 survey[i]에 charAt()을 사용하여 두번째 인덱스와 같은 key에 점수를 더하고
값이 4 미만이면 survey[i]의 첫번째 인덱스와 같은 key에(HashMap) 점수를 더하는 식으로 진행했다
마지막으로는 삼항연산자로 key에 담긴 값을 비교하여 더 큰 값쪽의 성격유형을 answer에 더해 리턴해주었다
[코드보기]
public static void solution(String[] survey, int[] choices) {
HashMap<Character, Integer> map = new HashMap<>() {
{
put('R', 0); put('T', 0);
put('C', 0); put('F', 0);
put('J', 0); put('M', 0);
put('A', 0); put('N', 0);
}
};
for (int i = 0; i < survey.length; i++) {
char f = survey[i].charAt(0);// 비동의
char e = survey[i].charAt(1);// 동의
if (choices[i] < 4) {
int n = 4 - choices[i];
map.put(f, map.get(f) + n);
} else if (choices[i] > 4) {
int n = choices[i] - 4;
map.put(e, map.get(e) + n);
}
}
for (Entry<Character, Integer> entry : map.entrySet()) {
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
String answer = "";
answer = map.get('R') < map.get('T') ? (answer += "T") : (answer += "R");
answer = map.get('C') < map.get('F') ? (answer += "F") : (answer += "C");
answer = map.get('J') < map.get('M') ? (answer += "M") : (answer += "J");
answer = map.get('A') < map.get('N') ? (answer += "N") : (answer += "A");
return answer;
}
댓글남기기