반응형
문제 링크
문제 이해하기
- 성격 유형 종류는 총 8개로 고정이다.
지표 번호 성격 유형 1번 R, T 2번 C, F 3번 J, M 4번 A, N
- 점수는 총 7개로 분류된다.
매우 비동의
,비동의
,약간 비동의
,모르겠음
,약간 동의
,동의
,매우 동의
- 단, input 데이터에 따라 어느 곳에 점수를 부여해야 하는지 달라진다.
- 배열
survey
에는 성격 유형 종류 8개 중 각 지표가 쌍으로 들어간다.- 각 지표끼리만 입력 받을 수 있고 지표내의 성격 유형 순서는 바뀔 수 있다.
R, F
: 이런 지문은 존재하지 않는다.- (
R, T
,T, R
) 각 지문의 성격 유형 순서는 바뀔 수 있다.
- 각 지표끼리만 입력 받을 수 있고 지표내의 성격 유형 순서는 바뀔 수 있다.
- 배열
survey
와choices
의 요소는 1vs1로 매칭되는 요소이다.
- 점수는 세 가지 상황으로 분류할 수 있다.
choices
의 값이 4를 기준으로미만
,같음
,초과
으로 분류한다.choices
의 값이4 미만
- (
"AN"
,1
): A에 3점 - (
"AN"
,2
): A에 2점 - (
"AN"
,3
): A에 1점
- (
choices
의 값이4와 같음
- (
"AN"
,4
): 0점이므로 점수 부여하지 않음.
- (
choices
의 값이4 초과
- (
"AN"
,5
): N에 1점 - (
"AN"
,6
): N에 2점 - (
"AN"
,7
): N에 3점
- (
문제 풀이
map을 활용해 각 성격 유형의 수를 구합니다.
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < survey.length; i++) {
String sv = new String();
int choice = choices[i] - 4;
if (choice < 0) {
sv = String.valueOf(survey[i].charAt(0));
choice = Math.abs(choice);
} else if (choice > 0) {
sv = String.valueOf(survey[i].charAt(1));
}
if (!sv.isEmpty()) map.put(sv, map.getOrDefault(sv, 0) + choice);
}
- 세 가지 상황에 맞게 점수를 분류
map.getOrDefault(sv, 0)
map 내에 저장된sv
가 있으면sv
의 값을 가져오고, 없으면 0을 반환
성격 유형 구하기
public String getMBTI(Map<String, Integer> map) {
String[] mbtiGroup = { "RT", "CF", "JM", "AN" };
String mbti = new String();
for(String mg : mbtiGroup) {
String first = String.valueOf(mg.charAt(0));
String second = String.valueOf(mg.charAt(1));
int score = map.getOrDefault(first, 0) - map.getOrDefault(second, 0);
String pick = score < 0 ? second : first;
mbti += pick;
}
return mbti;
}
mbtiGroup
각 성격유형을 사전 순서대로 정렬한 배열 (지표별로)map.getOrDefault(first, 0)
map 내에first
가 있으면first
의 값을 반환하고, 없으면0
을 반환- 만약 점수가 같으면
first
반환 (사전 순으로 더 빠르기 때문에 )
전체 코드
import java.util.HashMap;
import java.util.Map;
class Solution118666 {
public String solution(String[] survey, int[] choices) {
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < survey.length; i++) {
String sv = new String();
int choice = choices[i] - 4;
if (choice < 0) {
sv = String.valueOf(survey[i].charAt(0));
choice = Math.abs(choice);
} else if (choice > 0) {
sv = String.valueOf(survey[i].charAt(1));
}
if (!sv.isEmpty()) map.put(sv, map.getOrDefault(sv, 0) + choice);
}
System.out.println(map);
return getMBTI(map);
}
public String getMBTI(Map<String, Integer> map) {
String[] mbtiGroup = { "RT", "CF", "JM", "AN" };
String mbti = new String();
for(String mg : mbtiGroup) {
String first = String.valueOf(mg.charAt(0));
String second = String.valueOf(mg.charAt(1));
int score = map.getOrDefault(first, 0) - map.getOrDefault(second, 0);
String pick = score < 0 ? second : first;
mbti += pick;
}
return mbti;
}
반응형
'Algorithm > Java' 카테고리의 다른 글
프로그래머스 - 옹알이 (2) JAVA :: 133499 (0) | 2022.12.19 |
---|---|
프로그래머스 - 숫자 짝꿍 JAVA :: 131128 (0) | 2022.12.13 |
프로그래머스 - k진수에서 소수 개수 구하기 :: 2022 KAKAO BLIND RECRUITMENT (0) | 2022.08.17 |
프로그래머스 - 줄 서는 방법 JAVA :: 12936 (1) | 2022.08.13 |
프로그래머스 - 숫자의 표현 JAVA (0) | 2022.08.05 |