프로그래머스 <성격 유형 검사>
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
성격 유형 검사
나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 4개 지표로 성격 유형을 구분하며, 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
각 질문은 1가지 지표로 성격 유형 점수를 판단합니다. 또한 질문에 따라 각 유형이 동의인지 비동의인지 주어집니다.
만약 점수가 같을 경우, 두 성격 유형 중 사전 순으로 빠른 성격 유형을 선택합니다.
문제해결
이 문제는 index 처리를 잘 하면 간단하게 풀 수 있다.
성격 유형을 key로 해당 유형의 점수를 value로 하는 HashMap을 만들어서 점수를 누적해두었다.
index 처리는 아래와 같이 코드를 구현해 점수를 구하는데 사용하였다.
점수가 같을 경우에는 두 성격 유형 중 사전 순으로 빠른 것을 고르기 때문에
성격 유형을 구할 때, 사전 순으로 빠른 것으로 초기화해두고, 사전 순으로 느린 것이 더 점수가 높다면 바꿔주는 식으로 구현하였다.
코드
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
char[] type = {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
HashMap<Character, Integer> hm = init(type);
int size = survey.length;
for(int i = 0; i < size; i++){
// 비동의인 경우
if(choices[i] < 4){
char ch = survey[i].charAt(0);
hm.put(ch, hm.get(ch) + (4-choices[i]));
}else if(choices[i] == 4){ // 모르겠음인 경우
continue;
}else{ // 동의인 경우
char ch = survey[i].charAt(1);
hm.put(ch, hm.get(ch) + choices[i] -4);
}
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 4; i++){
char ch = type[i*2];
if(hm.get(type[i*2+1]) > hm.get(type[i*2])){
ch = type[i*2+1];
}
sb.append(ch);
}
return sb.toString();
}
static HashMap<Character, Integer> init(char[] type){
HashMap<Character, Integer> hm = new HashMap<>();
for(int i = 0; i < type.length; i++){
hm.put(type[i], 0);
}
return hm;
}
}
결과
728x90
'Algorithm' 카테고리의 다른 글
백준 1446번 <지름길> (0) | 2023.04.23 |
---|---|
백준 13335번 <트럭> (0) | 2023.01.17 |
프로그래머스 <게임 맵 최단거리> (0) | 2023.01.01 |
백준 1303번 <전쟁-전투> (0) | 2022.12.27 |
[프로그래머스] 프린터 (0) | 2022.12.16 |
댓글