< 풀이 >
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
char arr[][]={{'R','T'},{'C','F'},{'J','M'},{'A','N'}};
HashMap<Character,Integer> map=new HashMap<>();
HashMap<Integer,Integer>score= new HashMap<>();
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
map.put(arr[i][j],0);
}
}
//선택에 따른 점수 저장
int num=3;
for(int i=1;i<=7;i++){
if(i<4){
score.put(i,num);
num--;
}
else {
score.put(i,num);
num++;
}
}
for(int i=0;i<survey.length;i++){
char c1=survey[i].charAt(0);
char c2=survey[i].charAt(1);
if(choices[i]<5){
map.put(c1, map.get(c1) + score.get(choices[i]));
}
else{
map.put(c2, map.get(c2) + score.get(choices[i]));
}
}
String answer = "";
for(int i=0;i<arr.length;i++){
Arrays.sort(arr[i]);//오름차순 정렬
int score1=map.get(arr[i][0]);
int score2=map.get(arr[i][1]);
if(score1>=score2)
answer+=arr[i][0];
else
answer+=arr[i][1];
}
return answer;
}
}
✏️ 풀이 과정
1. 지표별 성격 유형을 char 형 2차원 배열 arr 에 저장한다.
2. Hashmap 으로 선언한 map 에 성격 유형을 key 로 하여 점수를 저장한다. ( 처음에는 0으로 초기화 )
3. Hashmap 으로 선언한 score 에 choices 에 따른 점수를 저장한다.
=> 1번: 3점, 2번: 2점, 3번: 1점, 4번: 0점, 5번: 1점, 6번: 2점, 7번: 3점
4. survey 배열을 돌며 성격 유형별 점수를 계산한다.
=> ex) "AN" 이고 5번을 선택하였을 때: 번호가 5번(약간 동의) 를 선택하였으므로 네오형 1점을 얻게 된다.
=> choices 의 값이 5 미만이면 문자열의 첫 문자에 해당하는 성격 유형의 값을 해당 점수만큼 증가시킨다.
=> choices 의 값이 5 이상이면 문자열의 두 번째 문자에 해당하는 성격 유형의 값을 해당 점수만큼 증가시킨다.
5. 점수에 따른 성격 유형을 구하기 위해 배열 arr 반복문을 돈다.
: 같은 지표 내에서 두 성격 유형의 점수를 비교한다. ( 각 지표에서 더 점수가 높은 것이 성격 유형이다. )
: 같은 점수일 경우 사전순으로 빠른 성격 유형이 선택되므로 오름차순 정렬을 해준다.
: 두 성격 유형 중 더 점수가 큰 값을 answer에 더해준다. ( 같은 점수일 경우 정렬을 했으므로 앞의 성격 유형의 값을 더해줌)
✍🏻 느낀점
이 문제를 예전에 풀려고 하다가 이해가 안돼서 그냥 넘어갔었는데, 이번에는 풀어내서 되게 뿌듯했다. 프로그래머스에서 계속 Hashmap을 사용하는 문제를 푸니까 익숙해지고, 여기저기 활용도 잘 하게 되었다. 맨날 내 실력이 제자리 걸음 같았는데 예전에 비해 문제 푸는 시간도 많이 줄고, 문제를 이해하는 속도도 좀 빨라지지 않았나 싶다. 내 착각일지 모르지만^.^ 그리고 이 문제는 채점하기 눌렀는데 바로 맞아서 더 기분이 좋았다. 오류 하나도 안나고 바로 맞은 건 처음인 것 같은데ㅎ 더 잘하고싶다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 완주하지 못한 선수 (1) | 2024.06.08 |
---|---|
[JAVA] 크레인 인형 뽑기 게임 (0) | 2024.06.01 |
[JAVA] 바탕화면 정리 (0) | 2024.05.27 |
[JAVA] 개인정보 수집 유효기간 (0) | 2024.05.27 |
[JAVA] 신고 결과 받기 (0) | 2024.05.23 |