본문 바로가기
기타/알고리즘

(JS) 객체를 배열로 변환, 절댓값 [Programmers - 성격 유형 검사하기]

by 가나닩 2024. 9. 30.

문제를 풀기위해 아래와 같은 요소들을 고려하였다.

  1. 객체를 효율적으로 활용하기 위해 key와 value를 배열로 변환하여 사용한다.
  2. 더해줄 점수 값을 효율적으로 계산하기 위해 선택된 점수에서 4를뺀뒤 절댓값을 취하도록 한다.
더보기
function solution(survey, choices) {
    let obj = {R:0, T:0, C:0, F:0, J:0, M:0, A:0, N:0}
    
    for(let i = 0;i<survey.length;i++){
        var nowScore = choices[i]-4;
        if(nowScore < 0) {
            obj[survey[i][0]] += Math.abs(nowScore)
        } else {
            obj[survey[i][1]] += Math.abs(nowScore)
        }
    }
    
    let totalScore = Object.values(obj);
    var answer = '';
    
    for(let j = 0;j<8;j=j+2){
        if(totalScore[j] >= totalScore[j+1]) {
            answer = answer + Object.keys(obj)[j]
        } else {
            answer = answer + Object.keys(obj)[j+1]
        }
    }
    
    return answer;
}

 

 

• 객체의 key, value를 각각 배열로 변환하기

객체의 key값과 value값을 각각 배열로 변환할 수 있다.

 

ex) 객체 obj = { A:1, B:2, C:3 } 일때

  • let keyArray = Object.keys(obj);    // [ "A", "B", "C" ]
  • let valueArray = Object.values(obj);    // [ 1, 2, 3 ]

 

• 절댓값

Math 내장객체를 활용해서 수의 절댓값을 사용할 수 있다.

 

ex) 수 let num = -3 일때

  • let absNum = Math.abs(num);    // 3

문제에서는 1~7 범위의 점수를 3,2,1,0,1,2,3의 점수 범위로 변환할 때 사용했다. (점수 - 4의 절댓값)

 

 

※ 삼항연산자, forEach 반복문

문제에서 사용한 if 조건문과 for 반복문은 삼항연산자와 forEach 반복문으로 좀더 간소화 시킬 수 있다.

 

• 삼항연산자

true/false 같은 두개로 나누어지는 조건으로 코드를 실행할때 if문을 사용하는 대신 삼항연산자를 사용하면 코드가 간결해진다.

조건 ? true일경우실행 : false일경우실행;

 

forEach

배열의 각 요소를 순회하면서 지정된 함수를 실행하고자 할때 사용할 수 있다.

array.forEach((현재 배열값, 현재 인덱스, 배열전체) => {
  // 주로 현재 배열값과 인덱스값을 많이 사용함
  // 실행할 코드
});