멍두의 개발새발

[프로그래머스] 성격 유형 검사하기 in Java 본문

Algorithm/Programmers

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

멍두 2024. 7. 1. 22:25
반응형

📍 문제

https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=java

 

프로그래머스

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

programmers.co.kr

 

📍 코드 설명

MBTI문제이다 ㅋㅋ

RT / CF / JM / AN 이 짝이고 둘 중에 점수가 큰 값을 출력한다 ex RCJA

 

survey가 AN, choices가 7이면 N에 +3점 ,choices가 1이면 A에 +3점

survey가 NA, choices가 7이면 A에 +3점, choices가 1이면 N에 +3점 

 

1. 설문 조사 결과를 담을 map을 하나 만든다

이때 map으로 만드는 이유는 매 choices마다 string값으로 검색하여 결과 값을 더할 것 이기 때문에 검색 속도가 빠른 map을 선택하였다.

2. choices를 기준으로 테스트 결과를 더한다

3. choices가 4이면 더할 값이 없으므로 다음 choices로 넘어간다

4. choices가 4 미만이면 survey의 첫번째 String을 가져온뒤 현재 총 합 + 4 - choices 를 수행한다

5. choices가 4 초과이면 suvery의 두번째 String을 가져온뒤 현재 총합 - 4 + choices를 수행한다.

6. StringBuilder를 사용하여 짝 중에 더 큰 값들을 append한다

📍 코드

✔️ 코드

더보기
더보기
import java.util.*;

class Solution {
    public String solution(String[] survey, int[] choices) {
        StringBuilder sb = new StringBuilder();
        //성격 결과지 map
        Map<String, Integer> result = new HashMap<>();
        result.put("R", 0);
        result.put("T", 0);
        result.put("C", 0);
        result.put("F", 0);
        result.put("J", 0);
        result.put("M", 0);
        result.put("A", 0);
        result.put("N", 0);
        
        //테스트 수행
        for(int i = 0; i < choices.length; i++){
            String[] surveyArr = survey[i].split("");
            if(choices[i] == 4){
                continue;
            }else if(choices[i] < 4){
                result.put(surveyArr[0], result.get(surveyArr[0]) + 4 - choices[i]);
            }else{
                result.put(surveyArr[1], result.get(surveyArr[1]) + choices[i]-4);
            }
        }
        
        //결과
        sb.append((result.get("R") >= result.get("T")) ? "R" : "T");
        sb.append((result.get("C") >= result.get("F")) ? "C" : "F");
        sb.append((result.get("J") >= result.get("M")) ? "J" : "M");
        sb.append((result.get("A") >= result.get("N")) ? "A" : "N");
        
        return sb.toString();
    }
}

 

📍 틀린이유

점수를 계산할 때 choices가 1이면 +3점인데 +1점으로 계산했다 

문제를 제대로 파악하지 않아 한 실수이다

이런 기본적인 실수를 하지 않도록 출력 예시를 꼼꼼하게 살펴보고 손으로 쓰자

방법이 생각났다고 급하게 코드로 작성하면 오히려 틀리고 오래걸린다!!!

또한 귀찮다고 안하지 말고 디버깅도 계속 해볼것

 

📍 기억할 것

손으로 쓰고 코드 작성하기

디버깅 최대한 많이 하기

 

반응형