❗ 문제 설명
❗ 입출력 예
❗ 제한사항
✍ 문제풀이
- 8가지 성격 유형을 객체 저장
- 4를 기준으로 4보다 choices[n]값이 더 작으면 앞 유형에 더해주기, 더 크면 뒷 유형에 더해주기
- 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점🙌
(앞으로는 문제를 더 꼼꼼히 읽어봐야겠다😁)