[Programmers] 성격 유형 검사하기 - JAVA

최영환·2022년 11월 25일
0

Programmers

목록 보기
11/43
post-thumbnail

💡 문제



💬 입출력 예시

📌 풀이(소스코드)

import java.util.HashMap;

class Solution {
	public String solution(String[] survey, int[] choices) {
		String answer = "";
        // 지표별 결과 HashMap
		HashMap<Character, Integer> map = new HashMap<Character, Integer>();

		// 선택지에 따른 지표별 결과 저장
		for (int i = 0; i < survey.length; i++) {
			int value = choices[i];
			// 동의 선택지 선택
			if (value > 4) {
				char key = survey[i].charAt(1);
				map.put(key, map.getOrDefault(key, 0) + value - 4);
			}
			// 비동의와 모르겠음 선택지 선택
			else {
				char key = survey[i].charAt(0);
				map.put(key, map.getOrDefault(key, 0) + 4 - value);
			}
		}

        // 결과 문자열 생성
        // 둘 중 큰 값을 정해야하고, 같은 값일 경우 사전 순으로 빠른 알파벳이 결과가 되어야 함
		StringBuilder sb = new StringBuilder();
		sb.append(map.getOrDefault('R', 0) >= map.getOrDefault('T', 0) ? 'R' : 'T')
				.append(map.getOrDefault('C', 0) >= map.getOrDefault('F', 0) ? 'C' : 'F')
				.append(map.getOrDefault('J', 0) >= map.getOrDefault('M', 0) ? 'J' : 'M')
				.append(map.getOrDefault('A', 0) >= map.getOrDefault('N', 0) ? 'A' : 'N');

		answer = sb.toString();
		return answer;
	}
}

📄 해설

  • HashMap 을 사용해서 해결해야하는 문제
  • 선택지에 따른 지표별 결과를 아래와 같이 저장함
    1. 동의 시 : survey[i] 의 두번째 문자 -> key, 해당 key 의 값 -> value - 4
    2. 비동의 시 : survey[i] 의 첫번째 문자 -> key, 해당 key 의 값 -> 4 - value
      두 경우에 대하여 공통적으로 value = choices[i]
  • RT, CF, JM, AN 의 값을 각각 비교한 뒤 조건에 맞게 결과 문자열 생성
profile
조금 느릴게요~

0개의 댓글