th42500의 TIL

[Java] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기 본문

Algorithm/Programmers

[Java] 2022 KAKAO TECH INTERNSHIP - 성격 유형 검사하기

th42500 2022. 8. 29. 23:58

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

 

프로그래머스

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

programmers.co.kr

 

 

✔ 입출력 예시

성격 유형 검사하기 입출력 예시

 

 

💡 포인트

     1️⃣ 각 지표 별로 유형 2가지 중 한가지만 선택

     2️⃣ 선택지에 따라 점수가 다름

           

           '매우 ~' 선택지가 가장 점수가 높고 '약간 ~' 선택지가 가장 점수가 낮으며, '모르겠음'은 어떤 유형도 점수 ❌

     3️⃣ 만약 각 지표 별 2가지 유형 모두 점수가 동일하다면 사전순으로 빠른 유형이 선택

 

 

❓ 풀이과정

     1️⃣ 각 유형별 점수를 담을 길이가 8인 배열 생성

     2️⃣ survey배열을 순회하며 동의(점수가 3점 이하)일 경우 앞의 성격 유형을,  비동의(점수가 5점 이상)일 경우 뒤의

           성격 유형을 선택

     3️⃣ 1️⃣에서 선언한 배열의 선택된 성격 유형에 맞는 위치에 점수를 더해줌 

     4️⃣ 각 지표별 유형들의 점수를 비교하여 더 높은 점수의 유형을, 점수가 동일하다면 사전순으로 빠른 성격 유형을 선택

 

 

❗ 결과

    👉 테스트 통과

 

 

✔ 소스코드

public class Solution {

	public static void main(String[] args) {
//		String[] survey = { "AN", "CF", "MJ", "RT", "NA" };
//		int[] choices = { 5, 3, 2, 7, 5 };

		String[] survey = {"TR", "RT", "TR"};
		int[] choices = {7, 1, 3};

		System.out.println(solution(survey, choices));
	}
	
	private static String solution(String[] survey, int[] choices) {
		int[] scores = new int[8];  // 각 성격 유형별 점수를 담을 배열
		
		for (int i = 0; i < survey.length; i++) {
			if(choices[i] <= 3) {  // 동의일 경우
				String type = survey[i].substring(0, 1);  // 앞의 성격 유형 선택
				switch (type) {
				case "R":
					scores[0] += 4-choices[i];
					break;
				case "T":
					scores[1] += 4-choices[i];
					break;
				case "C":
					scores[2] += 4-choices[i];
					break;
				case "F":
					scores[3] += 4-choices[i];
					break;
				case "J":
					scores[4] += 4-choices[i];
					break;
				case "M":
					scores[5] += 4-choices[i];
					break;
				case "A":
					scores[6] += 4-choices[i];
					break;
				case "N":
					scores[7] += 4-choices[i];
					break;
				}
				
			} else if (choices[i] >= 5) {  // 비동의일 경우
				String type = survey[i].substring(1, 2);  // 뒤의 성격 유형 선택
				switch (type) {
				case "R":
					scores[0] += choices[i]-4;
					break;
				case "T":
					scores[1] += choices[i]-4;
					break;
				case "C":
					scores[2] += choices[i]-4;
					break;
				case "F":
					scores[3] += choices[i]-4;
					break;
				case "J":
					scores[4] += choices[i]-4;
					break;
				case "M":
					scores[5] += choices[i]-4;
					break;
				case "A":
					scores[6] += choices[i]-4;
					break;
				case "N":
					scores[7] += choices[i]-4;
					break;
				}
			}
			
		}
		
		StringBuilder sb = new StringBuilder();
        // 각 지표별 유형 점수를 비교하여 더 높은 점수의 유형 선택
		sb.append((scores[0] < scores[1]) ? "T" : "R");
		sb.append((scores[2] < scores[3]) ? "F" : "C");
		sb.append((scores[4] < scores[5]) ? "M" : "J");
		sb.append((scores[6] < scores[7]) ? "N" : "A");
		
		return sb.toString();
	}

}

 

처음에는 문제를 보고 당황했지만 매우 쉬웠던 문제❗ 오랜만에 switch문과 삼항연산자를 사용해서 풀어본 문제😋

Comments