알고리즘
프로그래머스 성격 유형 검사하기(JAVA)
박카스마시며코딩
2022. 9. 1. 17:12
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
저는 구현을 통해 문제를 해결하였습니다.
choices에 중간 값을 빼고 음수인지 양수인지에 따라 앞에 점수를 부여하거나 뒤에 점수를 부여하였습니다.
결과를 도출할 때는 PERSONALITY_TYPE을 돌면서 비교하여 점수를 비교하여 결과를 도출하였습니다.
PERSONALITY_TYPE을 초기화할 때 알파벳 순서대로 넣어놨기에 둘의 점수가 같다면 앞에 것을 결과로 도출하였습니다.
import java.util.*;
class Solution {
private static final char[][] PERSONALITY_TYPE = {{'R','T'},{'C','F'},{'J','M'},{'A','N'}};
private static final int HALF_SCORE = 4;
public String solution(String[] survey, int[] choices) {
Map<Character,Integer> score = new HashMap<>();
for(int i = 0 ; i < survey.length ; i++){
String str = survey[i];
int choice = choices[i];
cal(score,str,choice);
}
String answer = "";
answer = makeResult(score);
return answer;
}
private static String makeResult(Map<Character,Integer> score) {
StringBuilder sb = new StringBuilder();
for(char[] chArray : PERSONALITY_TYPE){
int prevScore = score.getOrDefault(chArray[0], 0);
int nextScore = score.getOrDefault(chArray[1], 0);
if(prevScore >= nextScore){
sb.append(chArray[0]);
}else{
sb.append(chArray[1]);
}
}
return sb.toString();
}
private static void cal(Map<Character,Integer> score, String str,int choice){
char prev = str.charAt(0);
char next = str.charAt(1);
int nowScore = choice - HALF_SCORE;
if(nowScore < 0){
score.merge(str.charAt(0),Math.abs(nowScore),(v1,v2)-> v1 + Math.abs(nowScore));
}else if(nowScore > 0){
score.merge(str.charAt(1),Math.abs(nowScore),(v1,v2)-> v1 + Math.abs(nowScore));
}
}
}