프로그래머스 LEVEL 1. 성격 유형 검사 (JavaScript)

Bendeso·2023년 8월 26일
0

알고리즘

목록 보기
19/19
post-thumbnail

❗ 문제 설명


❗ 입출력 예




❗ 제한사항

✍ 문제풀이

  1. 8가지 성격 유형을 객체 저장
  2. 4를 기준으로 4보다 choices[n]값이 더 작으면 앞 유형에 더해주기, 더 크면 뒷 유형에 더해주기
  3. R과 T, C와 F, J와 M, A와 N의 프로퍼티 값을 비교해서 더 큰 값을 출력해주기. 만약 두 유형의 값이 같다면 사전 순으로 더 빠른 유형 출력해주기

📌코드

function solution(survey, choices) {
    let answer = '';
    const  personality = {
        R: 0,
        T: 0,
        C: 0,
        F: 0,
        J: 0,
        M: 0,
        A: 0,
        N: 0
    }
    
   for (let i = 0; i < choices.length; i++) {
       const [first, second] = survey[i].split("");
       // 점수가 3, 2, 1, 0, 1, 2, 3 순으로 진행되기 때문에 Math.abs(choices[i] - 4)를 해주어서 절대값으로 구하기
       const value = Math.abs(choices[i] - 4)
       // choices[i]번째 값이 4보다 작다면 앞 유형에 더해주기
        if (choices[i] < 4) {
            personality[first] += value;
            // choices[i]번째 값이 4보다 크다면 뒷 유형에 더해주기
        } else if (choices[i] > 4) {
            personality[second] += value
        }
   }
    
    const keys = Object.keys(personality);
    for (let i = 0; i < keys.length; i += 2) {
        if (personality[keys[i]] >= personality[keys[i+1]]) answer += keys[i];
        else answer += keys[i+1]
    }
    console.log(personality)
    return answer;
}

😂어려웠던 점

첫번째 시도를 했을 때 45점이라는 처참한 점수를 받고 충격을 받았다.
왜일까 머리를 쥐어뜯으면 코드를 검토해도 틀릴만한 곳이 없는데...
침착하게 문제를 다시 읽어봤더니

제한사항의 이 표만 보고 1, 2, 3번의 점수를 1점, 2점, 3점이라고 착각했다...

점수는 3, 2, 1, 0, 1, 2, 3 순으로 부여되기 때문에 Math.abs(choices[i] - 4) 이렇게 작성해야한다.

다행히 수정 후 100점🙌
(앞으로는 문제를 더 꼼꼼히 읽어봐야겠다😁)

profile
성장을 위한 몸부림

0개의 댓글