문제: https://school.programmers.co.kr/learn/courses/30/lessons/118666
1. 코드
import java.util.*;
class Solution {
public String solution(String[] survey, int[] choices) {
String answer = "";
List <String> type = new ArrayList(List.of("R", "T", "C", "F", "J", "M", "A", "N"));
int[] sum = new int[type.size()];
for(int i = 0; i < survey.length; i++) {
String a = survey[i].substring(0, 1);
String b = survey[i].substring(1, 2);
switch(choices[i]) {
case 1: case 2: case 3:
sum[type.indexOf(a)] += 4 - choices[i];
break;
case 5: case 6: case 7:
sum[type.indexOf(b)] += choices[i] - 4;
break;
}
}
for(int i = 0; i < sum.length ; i += 2) {
if(sum[i] < sum[i + 1])
answer += type.get(i + 1);
else
answer += type.get(i);
}
return answer;
}
}
2. 설명
String answer = "";
List <String> type = new ArrayList(List.of("R", "T", "C", "F", "J", "M", "A", "N"));
int[] sum = new int[type.size()];
type은 성격 유형들을 저장합니다. sum은 type의 순서대로 성격 유형 점수의 합을 저장합니다.
for(int i = 0; i < survey.length; i++) {
String a = survey[i].substring(0, 1);
String b = survey[i].substring(1, 2);
switch(choices[i]) {
case 1: case 2: case 3:
sum[type.indexOf(a)] += 4 - choices[i];
break;
case 5: case 6: case 7:
sum[type.indexOf(b)] += choices[i] - 4;
break;
}
}
survey에서 첫 번째 문자는 a에 두 번째 문자는 b에 저장한 뒤 switch 문을 통해서 choices가 1~3일 경우 type에서 문자열 a를 저장하고 있는 인덱스에 4 - choices를 5~7일 경우 type에서 문자열 b를 저장하고 있는 인덱스에 choices - 4를 sum에 더합니다.
for(int i = 0; i < sum.length ; i += 2) {
if(sum[i] < sum[i + 1])
answer += type.get(i + 1);
else
answer += type.get(i);
}
비교 대상인 성격 지표의 점수를 비교한 뒤 더 큰 점수를 가진 성격 유형을 추가합니다. 성격 점수가 같은 경우 이미 사전 순서로 맞췄기에 문제 되지 않습니다.
3. 정리
- 사전 순서로 미리 배열해 놓으면 쉽게 문제가 해결된다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 150370번: 개인정보 수집 유효 기간 [Java] (0) | 2023.08.17 |
---|---|
프로그래머스 - 161990번: 바탕화면 정리 [Java] (0) | 2023.08.16 |
프로그래머스 - 133502번: 햄버거 만들기 [Java] (0) | 2023.08.14 |
프로그래머스 - 72410번: 신규 아이디 [Java] (0) | 2023.08.13 |
프로그래머스 - 67256번: 키패드 누르기 [Java] (0) | 2023.08.12 |