본문 바로가기

컴퓨터/프로그래머스

프로그래머스 - 118666번: 성격 유형 검사하기 [Java]

문제: https://school.programmers.co.kr/learn/courses/30/lessons/118666

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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. 정리

  1. 사전 순서로 미리 배열해 놓으면 쉽게 문제가 해결된다.
출처: 프로그래머스 코딩 테스트 연습, 
https://school.programmers.co.kr/learn/challenges