성격유형검사하기 lv1
https://school.programmers.co.kr/learn/courses/30/lessons/118666
function solution(survey, choices) {
var answer = '';
let arr = []
let scores = {R:0, T:0, C:0, F:0, J:0, M :0, A:0, N:0}
survey.map((e,i) => {
if(choices[i] >4){
scores[e[1]] +=(choices[i]-4)
}
else if(choices[i]<4){
scores[e[0]] += (4-choices[i])
}
else{
return true
}
})
if(scores['R'] >= scores['T']){
arr.push('R')
}
else{
arr.push('T')
}
if(scores['C'] >= scores['F']){
arr.push('C')
}
else{
arr.push('F')
}
if(scores['J'] >= scores['M']){
arr.push('J')
}
else{
arr.push('M')
}
if(scores['A'] >= scores['N']){
arr.push('A')
}
else{
arr.push('N')
}
answer = arr.join('')
return answer;
}
이 방식은 탐색할 배열의 최대 길이가 1000밖에 안되어서 가능한 풀이다.
절대 좋은 풀이가 아니다.
그러다가 나처럼 푼 사람들도 있었지만,
몇몇 사람들이 Map 자료구조를 이용해서 풀었음을 확인했다.
MDN 페이지를 참고로 하여 공부했는데 특히 키 기반의 컬렉션의 내용이 좋았다. 이 부분을 위주로 내용을 정리해보고자 한다.
참고 자료 : Map vs Object in JavaScript
위의 코드나 밑의 코드나 가독성에서 차이가 날 뿐 거의 똑같은 로직이다.
이번에 Map이라는 자료구조를 한 번 써본 좋은 경험이라고 생각하면 좋다.
function solution(survey, choices) {
var answer = '';
const scores = new Map()
const arr = ['R','T','C','F','J','M','A','N']
arr.map(e => scores.set(e,0))
survey.map((e,i)=> {
if(choices[i] < 4){
scores.set(e[0],scores.get(e[0]) + (4-choices[i]))
}
else if(choices[i] > 4){
scores.set(e[1],scores.get(e[1]) + (choices[i]-4))
}
else{
return true
}
})
answer += scores.get('R') >= scores.get('T') ? 'R' : 'T'
answer += scores.get('C') >= scores.get('F') ? 'C' : 'F'
answer += scores.get('J') >= scores.get('M') ? 'J' : 'M'
answer += scores.get('A') >= scores.get('N') ? 'A' : 'N'
return answer;
}