본문 바로가기
알고리즘/프로그래머스

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

by KDW999 2023. 2. 1.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근

 

좀 더 줄여서 풀 수 있는 방법이 있을건데 떠오르지 알아서 주먹구구식으로라도 풀었다.

최종 유형은 RT, CF, JM, AN 선택지 중 점수 높은 글자를 하나 씩 가져와서 붙이기에 각 선택지의 배열을 만들었다.

이후 survey 크기만큼 돌아가는 for문에서 survey의 배열 하나씩 검사한 뒤 RT일 때, TR일 때 등 그 때 마다의 점수를 계산하였다.

public String solution(String[] survey, int[] choices) {
		String answer = "";
		int[] RT = { 0, 0 };
		int[] CF = { 0, 0 };
		int[] JM = { 0, 0 };
		int[] AN = { 0, 0 };

		for (int i = 0; i < survey.length; i++) {
			if (survey[i].equals("RT")) { // RT
				if (choices[i] == 1)
					RT[0] += 3;
				else if (choices[i] == 2)
					RT[0] += 2;
				else if (choices[i] == 3)
					RT[0] += 1;

				else if (choices[i] == 5)
					RT[1] += 1;
				else if (choices[i] == 6)
					RT[1] += 2;
				else if (choices[i] == 7)
					RT[1] += 3;
				else
					continue;
			} else if (survey[i].equals("TR")) {
				if (choices[i] == 1)
					RT[1] += 3;
				else if (choices[i] == 2)
					RT[1] += 2;
				else if (choices[i] == 3)
					RT[1] += 1;

				else if (choices[i] == 5)
					RT[0] += 1;
				else if (choices[i] == 6)
					RT[0] += 2;
				else if (choices[i] == 7)
					RT[0] += 3;
				else
					continue;
			} else if (survey[i].equals("CF")) { // CF
				if (choices[i] == 1)
					CF[0] += 3;
				else if (choices[i] == 2)
					CF[0] += 2;
				else if (choices[i] == 3)
					CF[0] += 1;

				else if (choices[i] == 5)
					CF[1] += 1;
				else if (choices[i] == 6)
					CF[1] += 2;
				else if (choices[i] == 7)
					CF[1] += 3;
				else
					continue;
			} else if (survey[i].equals("FC")) {
				if (choices[i] == 1)
					CF[1] += 3;
				else if (choices[i] == 2)
					CF[1] += 2;
				else if (choices[i] == 3)
					CF[1] += 1;

				else if (choices[i] == 5)
					CF[0] += 1;
				else if (choices[i] == 6)
					CF[0] += 2;
				else if (choices[i] == 7)
					CF[0] += 3;
				else
					continue;
			} else if (survey[i].equals("JM")) { // JM
				if (choices[i] == 1)
					JM[0] += 3;
				else if (choices[i] == 2)
					JM[0] += 2;
				else if (choices[i] == 3)
					JM[0] += 1;

				else if (choices[i] == 5)
					JM[1] += 1;
				else if (choices[i] == 6)
					JM[1] += 2;
				else if (choices[i] == 7)
					JM[1] += 3;
				else
					continue;
			} else if (survey[i].equals("MJ")) {
				if (choices[i] == 1)
					JM[1] += 3;
				else if (choices[i] == 2)
					JM[1] += 2;
				else if (choices[i] == 3)
					JM[1] += 1;

				else if (choices[i] == 5)
					JM[0] += 1;
				else if (choices[i] == 6)
					JM[0] += 2;
				else if (choices[i] == 7)
					JM[0] += 3;
				else
					continue;
			} else if (survey[i].equals("AN")) { // AN
				if (choices[i] == 1)
					AN[0] += 3;
				else if (choices[i] == 2)
					AN[0] += 2;
				else if (choices[i] == 3)
					AN[0] += 1;

				else if (choices[i] == 5)
					AN[1] += 1;
				else if (choices[i] == 6)
					AN[1] += 2;
				else if (choices[i] == 7)
					AN[1] += 3;
				else
					continue;
			} else if (survey[i].equals("NA")) {
				if (choices[i] == 1)
					AN[1] += 3;
				else if (choices[i] == 2)
					AN[1] += 2;
				else if (choices[i] == 3)
					AN[1] += 1;

				else if (choices[i] == 5)
					AN[0] += 1;
				else if (choices[i] == 6)
					AN[0] += 2;
				else if (choices[i] == 7)
					AN[0] += 3;
				else
					continue;
			}
		}

		if (RT[0] > RT[1])
			answer += "R";
		else if (RT[0] < RT[1])
			answer += "T";
		else
			answer += "R";

		if (CF[0] > CF[1])
			answer += "C";
		else if (CF[0] < CF[1])
			answer += "F";
		else
			answer += "C";

		if (JM[0] > JM[1])
			answer += "J";
		else if (JM[0] < JM[1])
			answer += "M";
		else
			answer += "J";

		if (AN[0] > AN[1])
			answer += "A";
		else if (AN[0] < AN[1])
			answer += "N";
		else
			answer += "A";

		return answer;
	}

 

 

다른 사람 풀이

해석하는데 꽤 시간이 걸렸다.

 

public String solution(String[] survey, int[] choices) {
        String answer = "";
        char [][] type = {{'R', 'T'}, {'C', 'F'}, {'J', 'M'}, {'A', 'N'}};
        int [] score = {0, 3, 2, 1, 0, 1, 2, 3};
        HashMap<Character, Integer> point = new HashMap<Character, Integer>();

        // 점수 기록할 배열 초기화 
        for (char[] t : type) { // t에 type[0] ~ type[3]가 순서대로 들어감
            point.put(t[0], 0); // 배열로 인해 t[0]에는 type[0][0] ~ type[3][0]
            point.put(t[1], 0); // t[1]에는 type[0][1] ~ type[3][1]이 들어가는데
                                // 해쉬맵에서 t[0], t[1] 키 값에 0을 저장
        }

        // 점수 기록 
        for (int idx = 0; idx < choices.length; idx++){
            if(choices[idx] > 4){ // 4를 기준으로 유형의 순서가 바뀌니까 
                point.put(survey[idx].charAt(1), point.get(survey[idx].charAt(1)) + score[choices[idx]]); // 문자에 숫자 저장, 
                //처음엔 값이 저장되지 않아서 0이고 score[choices[idx]]씩 계속 더 해줌
                 // point hashmap 저장된 키의 값 가져오기
            } else {
                point.put(survey[idx].charAt(0), point.get(survey[idx].charAt(0)) + score[choices[idx]]);
            }
        }

        // 지표 별 점수 비교 후 유형 기입
        for (char[] t : type) {
        	System.out.println(point.get(t[1])); // hashmap으로 문자에 숫자를 저장해놨으니 값 비교해서 answer에 저장
            answer += (point.get(t[1]) <= point.get(t[0])) ? t[0] : t[1];
            
        }

        return answer;
    }

댓글