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

2022. 8. 25. 21:42·코딩 테스트

카카오 레벨 1 문제가 새로 생겼길래 풀어보았다.

문제의 로직이 복잡하지는 않지만 구현에 시간이 좀 걸리겠다고 생각했다.

30분이면 풀 수 있을 것이라고 느꼈는데 한 시간이 걸렸다.

로직은 각 지표별 배열을 생성하고 List안에 Map을 만들어 초기화한 후

설문 결과에 맞게 Map의 value를 업데이트하는 것으로 생각했다.

설문 결과에 따라 유형별 점수 판별을 switch문을 사용하여 해결했다.

switch문을 쓰지 않고도 가능할 것 같기도 한데 빨리 풀고 싶어서 그냥 사용했다.

Map 사용에 꽤나 익숙해졌다고 생각했는데 아직 자유롭게 사용하지는 못하고 있는 것 같다.

다른 사람들 코드를 보면 내가 좀 복잡하게 푼 것 같다....


최종 코드

import java.util.*;
class Solution {
    public String solution(String[] survey, int[] choices) {
        // 각 지표별 배열 생성
        String[] character = {"RT", "CF", "JM", "AN"};

        // 리스트 안에 Map 선언
        List<Map<Character, Integer>> list = new ArrayList<>();
        StringBuilder sb = new StringBuilder();

        // 지표별 특성 Map 삽입
        for (int i = 1; i <= 4; i++) {
            Map<Character, Integer> subMap = new HashMap<>();
            subMap.put(character[i-1].charAt(0), 0);
            subMap.put(character[i-1].charAt(1), 0);
            list.add(subMap);
        }

        // survey 요소를 돌며 점수 판별
        for (int i = 0; i < survey.length; i++) {
            char c1 = survey[i].charAt(0);
            char c2 = survey[i].charAt(1);
            // 점수를 위한 변수
            int num = 0;
            // 1~3점 이면
            if(choices[i] < 4) {
                switch (choices[i]) {
                    case 1 : num = 3;
                    break;
                    case 2 : num = 2;
                    break;
                    case 3 : num = 1;
                    break;
                }
                // 각 유형에 맞는 점수 Map에 삽입
                for (int j = 0; j < list.size(); j++) {
                    if(list.get(j).get(c1) != null) {
                        list.get(j).put(c1, list.get(j).getOrDefault(c1, 0) + num);
                    }
                }
                // 5~7점 이면
            } else if(choices[i] > 4) {
                switch (choices[i]) {
                    case 5 : num = 1;
                    break;
                    case 6 : num = 2;
                    break;
                    case 7 : num = 3;
                    break;
                }
                for (int j = 0; j < list.size(); j++) {
                    if(list.get(j).get(c2) != null) {
                        list.get(j).put(c2, list.get(j).getOrDefault(c2, 0) + num);
                    }
                }
            }
        }

        // Map에서 더 큰 성격 유형을 sb에 추가
        // 같은 점수면 첫번째 값을 추가
        for (int i = 0; i < list.size(); i++) {
            Set<Character> set = list.get(i).keySet();
            Object[] ch = set.toArray();
            if(list.get(i).get(ch[0]) >= list.get(i).get(ch[1])) {
                sb.append(ch[0]);
            } else{
                sb.append(ch[1]);
            }
        }
        
        String answer = sb.toString();
        return answer;
    }
}

 

'코딩 테스트' 카테고리의 다른 글

(Java) 프로그래머스 - 주차 요금 계산  (2) 2022.08.30
(Java) 프로그래머스 - 양궁대회  (0) 2022.08.26
(Java) 프로그래머스 - 하노이의 탑  (0) 2022.08.18
(Java) 프로그래머스 - N-Queen  (0) 2022.08.13
(Java) 프로그래머스 - 숫자 블록  (0) 2022.08.12
'코딩 테스트' 카테고리의 다른 글
  • (Java) 프로그래머스 - 주차 요금 계산
  • (Java) 프로그래머스 - 양궁대회
  • (Java) 프로그래머스 - 하노이의 탑
  • (Java) 프로그래머스 - N-Queen
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Java) 프로그래머스 - 성격 유형 검사하기
상단으로

티스토리툴바