카카오 레벨 1 문제가 새로 생겼길래 풀어보았다.
문제의 로직이 복잡하지는 않지만 구현에 시간이 좀 걸리겠다고 생각했다.
30분이면 풀 수 있을 것이라고 느꼈는데 한 시간이 걸렸다.
로직은 각 지표별 배열을 생성하고 List안에 Map을 만들어 초기화한 후
설문 결과에 맞게 Map의 value를 업데이트하는 것으로 생각했다.
설문 결과에 따라 유형별 점수 판별을 switch문을 사용하여 해결했다.
switch문을 쓰지 않고도 가능할 것 같기도 한데 빨리 풀고 싶어서 그냥 사용했다.
Map 사용에 꽤나 익숙해졌다고 생각했는데 아직 자유롭게 사용하지는 못하고 있는 것 같다.
다른 사람들 코드를 보면 내가 좀 복잡하게 푼 것 같다....
최종 코드
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
// 각 지표별 배열 생성
String[] character = {"RT", "CF", "JM", "AN"};
// 리스트 안에 Map 선언
List<Map<Character, Integer>> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
// 지표별 특성 Map 삽입
for (int i = 1; i <= 4; i++) {
Map<Character, Integer> subMap = new HashMap<>();
subMap.put(character[i-1].charAt(0), 0);
subMap.put(character[i-1].charAt(1), 0);
list.add(subMap);
}
// survey 요소를 돌며 점수 판별
for (int i = 0; i < survey.length; i++) {
char c1 = survey[i].charAt(0);
char c2 = survey[i].charAt(1);
// 점수를 위한 변수
int num = 0;
// 1~3점 이면
if(choices[i] < 4) {
switch (choices[i]) {
case 1 : num = 3;
break;
case 2 : num = 2;
break;
case 3 : num = 1;
break;
}
// 각 유형에 맞는 점수 Map에 삽입
for (int j = 0; j < list.size(); j++) {
if(list.get(j).get(c1) != null) {
list.get(j).put(c1, list.get(j).getOrDefault(c1, 0) + num);
}
}
// 5~7점 이면
} else if(choices[i] > 4) {
switch (choices[i]) {
case 5 : num = 1;
break;
case 6 : num = 2;
break;
case 7 : num = 3;
break;
}
for (int j = 0; j < list.size(); j++) {
if(list.get(j).get(c2) != null) {
list.get(j).put(c2, list.get(j).getOrDefault(c2, 0) + num);
}
}
}
}
// Map에서 더 큰 성격 유형을 sb에 추가
// 같은 점수면 첫번째 값을 추가
for (int i = 0; i < list.size(); i++) {
Set<Character> set = list.get(i).keySet();
Object[] ch = set.toArray();
if(list.get(i).get(ch[0]) >= list.get(i).get(ch[1])) {
sb.append(ch[0]);
} else{
sb.append(ch[1]);
}
}
String answer = sb.toString();
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 주차 요금 계산 (2) | 2022.08.30 |
---|---|
(Java) 프로그래머스 - 양궁대회 (0) | 2022.08.26 |
(Java) 프로그래머스 - 하노이의 탑 (0) | 2022.08.18 |
(Java) 프로그래머스 - N-Queen (0) | 2022.08.13 |
(Java) 프로그래머스 - 숫자 블록 (0) | 2022.08.12 |