프로그래머스 | 성격 유형 검사하기 (Java)

mul·2023년 2월 16일
0

알고리즘

목록 보기
22/65
post-custom-banner

🔒 문제

프로그래머스 Lv.1 2022 KAKAO TECH INTERNSHIP 성격 유형 검사하기

🔑 해결

질문마다 판단하는 지표를 담은 1차원 문자열 배열 survey와 검사자가 각 질문마다 선택한 선택지를 담은 1차원 정수 배열 choices가 매개변수로 주어졌을 때, 검사자의 성격 유형 검사 결과를 지표 번호 순서대로 return하도록 solution 함수를 작성하는 문제이다.

검사자가 고른 선택지(choices)에 따라 점수를 더할 성격유형과 점수를 처리한다. 성격 유형을 담은 char배열 person과 person과 크기가 같은 int배열 score을 선언하여 점수를 합산한다.

  1. 성격 유형을 저장한 person 배열과 점수를 저장할 score 배열 선언
  2. survey 크기만큼 for문을 돌려 검사자의 점수를 합산
    2-1. 점수를 더할 성격 유형을 저장하기 위해 char형 da 선언 후 초기화
    2-2-1. 검사자가 고른 선택지 s가 4 미만이면 판단 지표의 첫 번째 캐릭터(survey[i].charAt(0))에 점수를 더할 것이기 때문에 da에 저장
    2-2-2. 1번 선택지는 첫번째 캐릭터에 3점을, 2번 선택지는 2점을, 3번 선택지는 1점을 합하기 때문에 s에 해당 점수를 저장.
    2-3-1. 검사자가 고른 선택지 s가 4 초과면 판단 지표의 두 번째 캐릭터(survey[i].charAt(1))에 점수를 더할 것이기 때문에 da에 저장
    2-3-2. 5번 선택지는 두번째 캐릭터에 1점을, 6번 선택지는 2점을, 7번 선택지는 3점을 합하기 때문에 s에 -4
    2-4. 검사자가 고른 선택지 s가 4라면 점수를 어느 성격유형도 점수를 얻지 않기 때문에 continue를 통해 아래 코드를 실행하지 않고 다음 반복문으로 넘어감.
    2-5. person의 크기만큼 for문을 돌려 da에 저장된 값과 person[j]가 같다면 score[j]에 점수(s)를 더함
    2-6. 점수 합산이 끝나고, for문을 통해 R, C, J, A을 각각 T, F, M, N과 비교하여 높은 점수(score)의 유형을 answer에 더한다.
    2-7. 성격 유형 점수가 person에 저장된 값을 비교하여 사전 순으로 빠른(person에 저장된 값이 작은) 성격을 answer에 더하다.

🔓 코드

class Solution {
   public String solution(String[] survey, int[] choices) {
		String answer = "";

		char[] person = { 'R', 'T', 'C', 'F', 'J', 'M', 'A', 'N' }; // 성격 유형
		int[] score = new int[8]; // 성격 유형 점수

		for (int i = 0; i < survey.length; i++) {
			char da = '\0';
			int s = choices[i]; // 선택지
			if (s < 4) { // 비동의 관련 선택지
				da = survey[i].charAt(0); // 첫 번째 캐릭터
				if (s == 1) {
					s = 3;
				} else if (s == 3) {
					s = 1;
				}
			} else if (s > 4) { // 동의 관련 선택지
				da = survey[i].charAt(1); // 두 번째 캐릭터
				s -= 4;
			} else {
				continue; // 모르겠음 선택 시 점수를 얻지 않음.
			}
			for (int j = 0; j < person.length; j++) {
				if (da == person[j]) {
					score[j] += s; // 동일한 인덱스 값에 점수를 더하기
				}
			}
		}
		
		for (int i = 0; i < person.length; i = i + 2) {
			if (score[i] < score[i+1]) {
				answer += person[i+1];
			} else if (score[i] > score[i+1]) {
				answer += person[i];
			} else { // 성격 유형 점수가 같으면 사전 순으로 빠른 성격 유형
				if (person[i] > person[i+1]) {
					answer += person[i+1];
				} else {
					answer += person[i];
				}
			}
		}

		return answer;
	}
}
post-custom-banner

0개의 댓글