LEVEL 1. 성격 유형 검사하기 [JAVA][자바]
문제 URL : https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1.문제 설명
일종의 mbti검사처럼 각 선택지에 따라 유형에 점수를 주어 설문이 끝났을때 점수에 따라 유형을 결정하는 문제이다.
문자열 배열 survey의 원소는 "RT", "TR", "FC", "CF", "MJ", "JM", "AN", "NA"중 하나로
"RT"일때 choice가 1이라면 R유형에 점수를 3점주게되고 choice가 7이라면 T유형에 점수를 3점 주게된다.
만약 설문이 끝났을때 두가지 유형의 점수가 같다면 두 알파벳중 사전순으로 빠른 알파벳을 성격 유형이라고 판단한다.
2. 풀이
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
char[] alp = new char[]{'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
int[] mbti = new int[4];//RT CF JM AN
for(int i = 0; i < choices.length; i++){
if(survey[i].equals("NA")){
mbti[3] -= (choices[i] - 4);
}
if(survey[i].equals("AN")){
mbti[3] += (choices[i] - 4);
}
if(survey[i].equals("MJ")){
mbti[2] -= (choices[i] - 4);
}
if(survey[i].equals("JM")){
mbti[2] += (choices[i] - 4);
}
if(survey[i].equals("FC")){
mbti[1] -= (choices[i] - 4);
}
if(survey[i].equals("CF")){
mbti[1] += (choices[i] - 4);
}
if(survey[i].equals("TR")){
mbti[0] -= (choices[i] - 4);
}
if(survey[i].equals("RT")){
mbti[0] += (choices[i] - 4);
}
}
for(int j = 0; j < 4; j++){
if(mbti[j] < 0){
answer += alp[j*2];
}else if(mbti[j] > 0){
answer += alp[j*2 + 1];
}else{
answer += alp[j*2];
}
}
return answer;
}
}
char[] alp 는 최종적으로 answer를 리턴할때 쓰기위해 각 유형별 알파벳으로 초기화해주었고
int[] mbti 는 설문에 따른 점수를 저장하기 위한 배열이다. 단 이 배열에는 RT CF JM AN씩 묶어 4개의 정수 원소를 가지고
0보다 작을수록 각각 R, C, J, A에 가중치를 주고 0보다 클수록 T, F, M, N에 가중치를 주도록 했다.
입력받은 survey의알파벳과 choices의 정수에 따라 배열 mbti를 변경한다.
입력이 끝나면 배열mbti[]에 따라 성향짝 중 더 가중치가 높은 알파벳을 alphabet에서 꺼내어 answer에 저장한다.
(문제의 조건중 하나인 점수가 같을 경우 사전상 알파벳순 으로 나타내는 조건은 모든 성향짝이 알파벳순으로 구성되어있어 따로 처리를 해주지 않아도 조건을 만족시킬 수 있다.)