프로그래머스_성격유형 검사하기 문제
https://school.programmers.co.kr/learn/courses/30/lessons/118666
해결방법
1. 일단 문제를 잘 이해하는 것이 중요하였다.
==> 처음에 문제를 이해하지 못해서 test-code 에 있는 것만 만족하는 정답을 만들었었다.
survey의 요소와 choices 의 관계를 파악하자.
map 을 먼저 만들어 놓고 진행
성격 요소별로 map을 만들어서 진행하자. 이때, map("RT", 0) 와 같이 하는것이 아니라
각 성격 유형이기 때문에 map('R' , 0) 와 같은 방식으로 구성해놓는다.
문제에 있는 요소들을 재정의 하는 것이 필요하였다.
choices 의 요소들은 1 ~ 7 까지 있지만, 순수하게 점수를 나타내는 것이 아니라 1~3번은 비동의를 나타내며 그것과 대응되는 성격유형이 따로 있다. 그렇기 때문에 실제 정답을 만들 때는 choices 의 성격을 이해하고 가공해줘야한다.
코드
import java.util.HashMap;
class Solution {
public String solution(String[] survey, int[] choices) {
// 정답이 될 값 초기화
String answer = "";
// 성격유형을 넣어줄 맵 생성하고 넣어줌
HashMap<Character, Integer> map = new HashMap<>();
// 성격유형별로 map을 만들어준다. (Key = 성격유형 , Value = 얻은 점수)
map.put('R', 0);
map.put('T', 0);
map.put('C', 0);
map.put('F', 0);
map.put('J', 0);
map.put('M', 0);
map.put('A', 0);
map.put('N', 0);
// survey 만큼 for 문을 돌리고 for 문의 결과는
// 각 성격유형마다 maping 된 key 에 결과를 더해준다.
for(int i = 0 ; i < survey.length ; i++){
// choices 에 대한 이해가 있어야하는 부분
// choices 가 4보다 크다면, choices -4 를 해서 들어갈 수 있도록 한다.
// -4 를 해줘야 각 성격유형에 양수로 대응 시킬 수 있음
if(choices[i] > 4){
map.put(survey[i].charAt(1) , map.get(survey[i].charAt(1)) + choices[i] - 4);
// choices 가 4보다 작다면, 4 - choices 를 해서 들어갈 수 있도록 한다.
// 4 - choices 를 해줘야 각 성격유형에 양수로 대응 시킬 수 있음
}else if(choices[i] < 4){
map.put(survey[i].charAt(0) , map.get(survey[i].charAt(0)) + 4 - choices[i]);
}
}
// map.get('성격유형') 을 활용해서 성격유형에 대응되는 Key 값을 호출한다.
if (map.get('R') >= map.get('T'))
answer = "R";
else
answer = "T";
if (map.get('C') >= map.get('F'))
answer += "C";
else
answer += "F";
if (map.get('J') >= map.get('M'))
answer += "J";
else
answer += "M";
if (map.get('A') >= map.get('N'))
answer += "A";
else
answer += "N";
return answer;
}
}