https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
나만의 카카오 성격 유형 검사지를 만들려고 합니다.
성격 유형 검사는 다음과 같은 4개 지표로 성격 유형을 구분합니다. 성격은 각 지표에서 두 유형 중 하나로 결정됩니다.
1번 지표 | 라이언형(R) | 튜브형(T) |
2번 지표 | 콘형(C) | 프로도형(F) |
3번 지표 | 제이지형(J) | 무지형(M) |
4번 지표 | 어피치형(A) | 네오형(N) |
4개의 지표가 있으므로 성격 유형은 총 16(=2 x 2 x 2 x 2)가지가 나올 수 있습니다. 예를 들어, "RFMN"이나 "TCMA"와 같은 성격 유형이 있습니다.
검사지에는 총 n개의 질문이 있고, 각 질문에는 아래와 같은 7개의 선택지가 있습니다.
- 매우 비동의
- 비동의
- 약간 비동의
- 모르겠음
- 약간 동의
- 동의
- 매우 동의
각 질문은 1가지 지표로 성격 유형 점수를 판단합니다.
- 제한 사항
- 1 ≤ survey의 길이 ≤ 1000
- survey의 원소는 'RT', 'TR', 'FC', 'CF', 'MJ', 'JM', 'AN', 'NA' 중 하나
- survey[i]의 첫번재 캐릭터는 i+1번 질문의 비동의 관련 선택지를 선택하면 받는 성격 유형
- survey[i]의 두번째 캐릭터는 i+1번 질문의 동의 관련 선택지를 선택하면 받는 성격 유형
- choices의 길이 = survey의 길이
- choices[i]는 검사자가 선택한 i+1번째 질문의 선택지
- 1 ≤ choices의 원소 ≤ 7
- 1은 매우 비동의, 7은 매우 동의를 의미
- 1 ≤ survey의 길이 ≤ 1000
- 입출력 예시
survey | choices | return |
['AN', 'CF', 'MJ', 'RT', 'NA'] | [5, 3, 2, 7, 5] | 'TCMA' |
['TR', 'RT', 'TR'] | [7, 1, 3] | 'RCJA' |
☆풀이☆
Hashmap 을 사용하여 각 성격유형에 점수를 저장한다.
for문을 사용하여 survey 에 각 성격유형을 한개씩 가져온다.
survey[i]의 첫번째character는 비동의 이기 때문에 첫번째를 기준으로 점수를 더해줬다.
각 타입별로 점수 합산을 완료하면 이제 무슨 타입인지 확인한다.
각 유형점수를 비교해 더 큰값을 sb에 저장한다.
package lv1;
import java.util.HashMap;
public class 성격유형검사하기 {
static String[] types = {"RT","CF","JM","AN"};
public static String typeCheck(HashMap<Character,Integer> map) {
StringBuilder sb = new StringBuilder();
char leftvalue;
char rightvalue;
for(String s : types){
leftvalue = s.charAt(0);
rightvalue = s.charAt(1);
if(map.get(leftvalue) >= map.get(rightvalue)) {
sb.append(leftvalue);
}else if(map.get(leftvalue) < map.get(rightvalue)) {
sb.append(rightvalue);
}
}
return sb.toString();
}
public static String solution(String[] survey, int[] choices) {
int []score = {0,3,2,1,0,-1,-2,-3};
int scoreSum = 0;
HashMap<Character, Integer> map = new HashMap<>();
//점수기록 기본값으로 초기화
for (String type : types){
map.put(type.charAt(0),0);
map.put(type.charAt(1),0);
}
//설문을 돌린다.
int n = survey.length;
for(int i=0;i<n;i++) {
//기본값에 점수를 더해준다.
scoreSum = map.get(survey[i].charAt(0))+score[choices[i]];
map.put(survey[i].charAt(0),scoreSum);
}
String answer =typeCheck(map);
return answer;
}
public static void main(String[] args) {
String[] survey = {"AN", "CF", "MJ", "RT", "NA"};
int[] choices = {5, 3, 2, 7, 5};
System.out.println(solution(survey, choices));
}
}
'프로그래머스' 카테고리의 다른 글
프로그래머스 - 가장가까운같은글자 JAVA (0) | 2023.08.24 |
---|---|
프로그래머스 - 둘만의 암호 JAVA (0) | 2023.08.24 |
프로그래머스 - 달리기 JAVA (0) | 2023.08.20 |
프로그래머스 - 실패율 JAVA (0) | 2023.08.19 |
프로그래머스 - 예산 JAVA (0) | 2023.03.17 |
댓글