프로그래머스 - 성격 유형 검사하기 (JAVA)
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제)
MBIT의 EI, NS, FT, JP 처럼 성격유형 RT, CF, JM, AN 있다.
7개의 선택지가 있고, 각각 1~7점이다.
"RT" 질문이 있을 때, 각 선택지별로 점수 배분은 아래와 같이 된다.
1점 | 2점 | 3점 | 4점 | 5점 | 6점 | 7점 |
R+1 | R+2 | R+3 | 0 | T+1 | T+2 | T+3 |
"TR" 질문 받았을 때는
1점 | 2점 | 3점 | 4점 | 5점 | 6점 | 7점 |
T+1 | T+2 | T+3 | 0 | R+1 | R+2 | R+3 |
검사 끝나고, 성격 유형 중 점수 큰 걸 선택
만약 성격 유형 점수가 같다면, 사전 순으로 빠른 걸 선택
접근 방식)
1) HashMap<알파벳, 점수> 만들어서, 각 유형별로 0점으로 초기화 해둔다.
2) survey[] 배열만큼 반복문 돌면서, 각 유형별 점수 UPDATE 해준다.
2-1) choices[i] - 4 의 결과가 (4를 선택하면 0이므로 4를 기준으로 성격유형이 나뉘므로)
음수면 → survey 중 왼쪽 알파벳 선택 (ex. "RT" 중 R)
양수면 → survey 중 오른쪽 알파벳 선택 (ex. "RT" 중 T)
2-2) 선택한 알파벳의 점수를 map.put()을 사용해서 update 해준다.
점수는 음수인 경우가 있으니, Math.abs() 를 사용해서 절댓값 처리해준다.
3) RT, DF, JM, AN 중 점수 높은 거 선택해서 StringBuilder에 추가해주고 결과 return
import java.util.HashMap;
class Solution {
public String solution(String[] survey, int[] choices) {
HashMap<Character, Integer> map = new HashMap<>();
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);
for (int i = 0; i < survey.length; i++) {
int score = choices[i] - 4;
if (score == 0) continue;
char type = ' ';
if (score < 0)
type = survey[i].charAt(0);
else
type = survey[i].charAt(1);
map.put(type, map.get(type) + Math.abs(score));
}
// RT CF JM AN
StringBuilder result = new StringBuilder();
result.append(map.get('R') >= map.get('T') ? 'R' : 'T')
.append(map.get('C') >= map.get('F') ? 'C' : 'F')
.append(map.get('J') >= map.get('M') ? 'J' : 'M')
.append(map.get('A') >= map.get('N') ? 'A' : 'N');
return result.toString();
}
}