문제를 풀기위해 아래와 같은 요소들을 고려하였다.
- 객체를 효율적으로 활용하기 위해 key와 value를 배열로 변환하여 사용한다.
- 더해줄 점수 값을 효율적으로 계산하기 위해 선택된 점수에서 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((현재 배열값, 현재 인덱스, 배열전체) => {
// 주로 현재 배열값과 인덱스값을 많이 사용함
// 실행할 코드
});
'기타 > 알고리즘' 카테고리의 다른 글
(JS) 반복문의 break [Programmers - 붕대 감기] (0) | 2024.10.04 |
---|---|
(JS) Set [Programmers - 신고 결과 받기] (0) | 2024.10.01 |
(JS) 동적 객체 key와 배열/객체 탐색 [Programmers - 달리기 경주] (0) | 2024.09.30 |
(JS) 배열 정렬과 연산 - sort, reduce [Programmers - 최솟값 만들기] (0) | 2024.09.29 |
(JS) 문자열과 숫자 변환 - split, map, toString, padStart [Programmers - 동영상 재생기] (0) | 2024.09.28 |