알고리즘/프로그래머스 Level1

[프로그래머스, Java] Level1: 성격 유형 검사하기

류창 2022. 8. 20. 18:01
반응형

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

 

프로그래머스

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

programmers.co.kr

 

 

문제분석 : 

카카오의 Levle1 =  쉬운데 엄청난 노가다를 시킨..

 

문제 설명 길이부터 엄청 남다르다..

 

문제를 요약하자면   MBTI 마냥  4개의 지표가있다.

 

1번지표 RT

 

2번지표 CF

 

3번지표 JM

 

4번지표 AN

 

 

여기서  R T 중 점수가 더 높은쪽이  R 지향인지 T 지향인지 출력하면된다. 2~4번도 마찬가지

 

근데 지표는 RT가  TR 처럼 뒤집히는 경우도있다.

 

점수를 얻는방법은  Scores[] 배열에 따른다.

 

1~ 3 점수는  첫번째알파벳에 점수추가를  4는 아무것도 없고 5~7은 두번째 알파벳 점수 추가를한다.

 

1: 첫번째 알파벳+3

 

2: 첫번째 알파벳 +2

 

3: 첫번째 알파벳 +1

 

4: X

 

5 두번째 알파벳 +1

 

6 두번째 알파벳 +2

 

7 두번째 알파벳+3

 

문제는 쉽지만 , 이 복잡한 조건과 케이스를 잘 정리정돈하면 된다.

전체 풀이:

 

그래서 필자의 코드는 다음과 같다. 짜다보니 좀 무식한 방법이 되버린것같지만..

무식할수록 읽기 편하긴 하니깐 ..

 

이것보다 더욱 깔끔한 코드를 이 글을 읽는 독자분들이라면  짤 수 있을것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.*;
class Solution {
    public String solution(String[] survey, int[] choices) {
        String answer = "";
        
        int[] scores = new int[]{0,3,2,1,0,1,2,3};
        
        Map<Character,Integer> map = new HashMap<>();
        
        //데이터 집어넣기
        for(int i=0;i<choices.length;i++){
            String str= survey[i];
            int score = scores[choices[i]];
            char c =survey[i].charAt(0);
            char c2=survey[i].charAt(1);
            if(choices[i]<4){     
                 if(!map.containsKey(c2)){
                    map.put(c2,0);
                } 
                
                if(map.containsKey(c)){
                    map.put(c,map.get(c)+score);
                    continue;
                }            
                map.put(c,score);
            }
            else if(choices[i]>4){
                if(!map.containsKey(c)){
                    map.put(c,0);
                }   
                
                if(map.containsKey(c2)){
                    map.put(c2,map.get(c2)+score);
                    continue;
                }
                map.put(c2,score);
            }
            else{
                
                if(map.containsKey(c)){
                    continue;
                }
                map.put(c,0);
                if(map.containsKey(c2)){
                    continue;
                }
                map.put(c2,0);
                
            }
        }
        
        //결과 정리정돈
       
       if(map.get('R')==null||map.get('R')>=map.get('T')){
           answer+="R";
       }
        else{
            answer+="T";
        }
        
       if(map.get('C')==null||map.get('C')>=map.get('F')){
           answer+="C";
       }
        else{
            answer+="F";
        } 
        
       if(map.get('J')==null||map.get('J')>=map.get('M')){
           answer+="J";
       }
        else{
            answer+="M";
        }
         
       if(map.get('A')==null||map.get('A')>=map.get('N')){
           answer+="A";
       }
        else{
            answer+="N";
        }
        
        return answer;
    }
}
cs

 

 

반응형