카카오 2022 테크 인턴쉽 코딩테스트 1번 문제로 공식 해설을 기반으로 문제를 풀었습니다.
문제는 프로그래머스에서 확인할 수 있습니다.
풀이
간단한 구현 문제입니다. 4개의 지표가 존재하고 각 지표는 두 가지 유형 중 하나입니다. 이 유형들의 점수를 해시나 배열을 사용하여 저장을 합니다. 그리고 설문의 점수대로 저장된 점수를 통해 결과를 출력하면 됩니다.
정리하면
1. 유형별 점수를 저장할 해시나 배열 생성
2. 설문의 점수대로 해당 유형에 점수 저장
3. 지표별 유형의 점수에 따라 최종 성격 유형 도출 (유형 점수가 같다면 사전순으로 빠른 성격 유형 선택)
코드
HashMap을 사용하여 풀이하였습니다.
import java.util.HashMap;
import java.util.Map;
// https://school.programmers.co.kr/learn/courses/30/lessons/118666
// 성격 유형 검사
public class Solution {
public String solution(String[] survey, int[] choices) {
StringBuilder answer = new StringBuilder();
// 1. 유형별 점수를 저장할 HashMap 생성
Map<Character, Integer> map = new HashMap<>();
// 지표별 유형(지표 내에서 미리 알파벳 순서로 정렬)
Character[] type = new Character[] {'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N'};
// HashMap 초기화
for (Character character : type) {
map.put(character, 0);
}
// 2. 설문의 점수별로 유형별 점수 HashMap에 저장
for (int i = 0; i < survey.length; i++) {
char c1 = survey[i].charAt(0);
char c2 = survey[i].charAt(1);
int choice = choices[i];
if (choice > 4) {
map.put(c2, map.getOrDefault(c2, 0) + choice - 4);
} else if (choice < 4) {
map.put(c1, map.getOrDefault(c1, 0) + 4 - choice);
}
}
// 3. 성격 유형 도출
for (int i = 0; i < type.length; i+=2) {
char c1 = type[i];
char c2 = type[i + 1];
answer.append(map.get(c1) >= map.get(c2) ? c1 : c2);
}
return answer.toString();
}
}
'알고리즘' 카테고리의 다른 글
[BOJ] Dance Dance Revolution - 2342 (2) | 2022.12.07 |
---|---|
[프로그래머스] 두 큐 합 같게 만들기 - JAVA (0) | 2022.09.10 |
[LeetCode] 162. Find Peak Element (0) | 2022.07.28 |
[LeetCode] 153. Find Minimum in Rotated Sorted Array (0) | 2022.07.26 |
[LeetCode] 33. Search in Rotated Sorted Array (0) | 2022.07.25 |