코딩응급실
프로그래머스: 성격 유형 검사하기 본문
import java.util.Map;
import java.util.HashMap;
class Solution {
public String solution(String[] survey, int[] choices) {
Map<Character, Integer> map = new HashMap<>();
for (int x=0; x<survey.length; x++) {
// 매우 비동의 ~ 매우 동의 점수값을 받아온다.
int val = choices[x];
//매우 비동의, 비동의, 약간 비동의 어쨌든 비동의
if(val > 0 && val < 4) {
// 앞에 문자를 하나 담는다.
char ch = survey[x].charAt(0);
// 어떻게 하든 더 큰 사이즈의 픽은 점수 순으로 3,2,1로 배정되어야 한다.
// 그래서 4-1=3, 4-2=2, 4-3=1이 되는 것이다.
map.put(ch, map.getOrDefault(ch, 0) + 4 - val);
}
// 약간 동의, 동의, 매우 동의 어쨌든 동의
else if(val > 4) {
// 뒤에 문자를 하나 담는다.
char ch = survey[x].charAt(1);
// 어떻게 하든 더 큰 사이즈의 픽은 점수 순으로 1,2,3로 배정되어야 한다.
// 그래서 5-4=1, 6-4=2, 7-4=3 이 되는 것이다.
map.put(ch, map.getOrDefault(ch, 0) + val - 4);
}
}
return new StringBuilder()
// 앞의 형태의 숫자가 더 큰가? 맞다면 앞의 문자를 추가함.
// 이게 좋은 점이, 0 0 으로 같을 때도 사전순으로 정렬할 필요도 없음.
.append(map.getOrDefault('R', 0) >= map.getOrDefault('T', 0) ? 'R' : 'T')
.append(map.getOrDefault('C', 0) >= map.getOrDefault('F', 0) ? 'C' : 'F')
.append(map.getOrDefault('J', 0) >= map.getOrDefault('M', 0) ? 'J' : 'M')
.append(map.getOrDefault('A', 0) >= map.getOrDefault('N', 0) ? 'A' : 'N')
.toString();
}
public static void main(String[] args) {
/*
A: 어피치형 N: 네오형
C: 콘형 F: 프로도형
M: 무지형 J: 제이지형
R: 라이언형 T: 튜브형
*/
String[] survey = {"AN", "CF", "MJ", "RT", "NA"};
/*
1 매우 비동의 = 3
2 비동의 = 2
3 약간 비동의 = 1
4 모르겠음 = 0
5 약간 동의 = 1
6 동의 = 2
7 매우 동의 = 3
*/
int[] choices = {5, 3, 2, 7, 5}; // 1, 1, 2, 3, 1점
/*
N에 +1
C에 +1
M에 +2
T에 +3
A에 +1
고로,
1) R: 0 T: 3 => T
2) C: 1 F: 0 => C
3) J: 0 M: 2 => M
4) A: 1 N: 1 => A
*/
Solution sol = new Solution();
String result = sol.solution(survey, choices);
System.out.println(result);
}
}
맵, 해시맵을 사용해서 빈도수가 높은 유형을 채택하는 방식이다.
이거는 정말 많이 연습을 해야 능숙하게 다룰 것 같다.
아직 많이 작성하기 까다롭다.
'Java' 카테고리의 다른 글
프로그래머스: 나머지가 1이 되는 수 찾기 (0) | 2024.01.20 |
---|---|
프로그래머스: 신고 결과 받기 (0) | 2024.01.20 |
프로그래머스: 숫자 짝꿍 (0) | 2024.01.20 |
프로그래머스: 삼총사 (0) | 2024.01.20 |
프로그래머스: 콜라 문제 (0) | 2024.01.20 |