꾸물꾸물 졔의 개발공부
[프로그래머스] 성격 유형 검사하기 - JAVA 본문
https://school.programmers.co.kr/learn/courses/30/lessons/118666
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
- 각 유형별로 점수를 총합 계산해야 한다.
- 유형을 key 로 하고, 점수를 value 로 하는 Map 을 활용하였다.
- 빠른 조회를 위한 HashMap을 사용하여 각 지표-유형별 점수를 구하고, 마지막에 유형(key)에 따른 점수를 모두 불러와 계산하면 끝!
구현 과정
- Map<Character, Integer> : key = 성격유형 8가지 중, value = 해당 유형의 점수
- survey[] : 질문마다 판단하는 지표를 담은 1차원 문자열 배열
- choices[] : 각 질문마다 선택한 선택지를 담은 1차원 정수 배열
1. survey[i] 는 현재 질문의 판단 지표, ans=choices[i] 는 해당 질문의 답변이라고 할 때, ans가 4이면 다음 문제로 넘어간다. 4번은 점수가 없기 때문이다.
2. 그렇지 않다면 비동의/동의에 따라 4-ans/ans-4를 적절히 하여 점수를 구한다. 성격 유형은 survey[i].charAt() 함수를 사용해서 첫번째/두번째 캐릭터를 가져올 수 있다.
3. map에 유형에 따른 점수를 추가한다. map.getOrDefault(key, 0) 를 사용하여 key값에 대응하는 value를 불러오되, 만약 key가 없다면 defualt 값으로 0을 리턴하도록 하였다.
4. 최종 map의 결과에 따라 성격 유형을 파악하여 리턴한다.
소스 코드
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
Map<Character, Integer> map = new HashMap<>();
for(int i=0; i<survey.length; i++){
String ques= survey[i]; //앞:비동의, 뒤:동의
int ans= choices[i]; //답변
if(ans==4) continue;
int score=0;
char type=' ';
if (ans<4){
score= 4-ans;
type= ques.charAt(0);
}
else {
score = ans-4;
type= ques.charAt(1);
}
map.put(type, map.getOrDefault(type, 0)+score);
}
StringBuilder sb= new StringBuilder();
sb.append(map.getOrDefault('R',0) >= map.getOrDefault('T', 0) ? 'R' : 'T')
.append(map.getOrDefault('C',0) >= map.getOrDefault('F', 0) ? 'C' : 'F')
.append(map.getOrDefault('J',0) >= map.getOrDefault('M', 0) ? 'J' : 'M')
.append(map.getOrDefault('A',0) >= map.getOrDefault('N', 0) ? 'A' : 'N');
return sb.toString();
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 코딩 테스트 공부 - JAVA (0) | 2023.05.09 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기 - JAVA (0) | 2023.05.03 |
[프로그래머스] 순위 - JAVA (0) | 2023.04.11 |
프로그래머스 - 마법의 엘리베이터 ( JAVA ) (0) | 2023.02.16 |
프로그래머스 - 디스크 컨트롤러 ( JAVA ) (0) | 2023.02.08 |