❓문제 설명
- length가 2인 문자열로 이루어진 배열을 줄 것임
- 숫자로 이루어진 동일한 length의 배열도 하나 줄 것임
- 두개를 짬뽕해서 어쩌구저쩌구 해서 문자 하나만 뽑으셈
- 사실 MBTI였음 이때까지 나온거 합쳐서 length가 4인 문자열 하나 출력해보셈
function solution(survey, choices) {
const types = {}
const answer = []
"RTCFJMAN".split("").map(item => types[item] = 0)
const newChoices = choices.map(item => item - 4)
for (item of survey) {
const [left, right] = item.split("")
const index = survey.indexOf(item)
const value = newChoices[index]
value > 0 ? types[right] += value : types[left] -= value
}
const keys = Object.keys(types)
for (let i = 0; i < keys.length; i +=2) {
const left = keys[i]
const right = keys[i + 1]
types[left] >= types[right] ? answer.push(left) : answer.push(right)
}
return answer.join("");
}
- 테스트 코드는 통과하였지만 제출할 때 정답률 60%로 나오는데 왜 이러는걸까?
✅ 문제 해결
function solution(survey, choices) {
const types = {}
let answer = ''
"RTCFJMAN".split("").map(item => types[item] = 0)
const newChoices = choices.map(item => item - 4)
for (let i = 0; i < choices.length; i++) {
const [left, right] = survey[i].split("")
const index = survey.indexOf(survey[i])
newChoices[i] >= 0 ? types[right] += newChoices[i] : types[left] -= newChoices[i]
}
const keys = Object.keys(types)
for (let i = 0; i < keys.length; i +=2) {
const left = keys[i]
const right = keys[i + 1]
types[left] >= types[right] ? answer += left : answer += right
}
return answer
}
- 결과적으로 보았을 때에는 for...of를 for문으로 바꿨는데 제대로 작동이 되는 느낌이다.
- indexOf()는 가장 처음에 있는 걸 가져오니까 중복된 질문이 있을 시에 이상하게 답변을 하게 되는구나 저게 문제였네..
❕느낀점
- indexOf() 는 중복을 일으킬 수 있으니깐 index가 필요한 반복문의 경우에는 그냥 반복문을 이용하자 for..of는 index를 제공하지 않는다.
- key를 반복적으로 이용하기 위해 이터러블한 배열로 만드는 방법 Object.keys(obj) 기억해두면 쓸모 있을 듯