N

(프로그래머스 KAKAO JS)성격 유형 검사하기 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 KAKAO JS)성격 유형 검사하기

naeunchan 2022. 8. 20. 17:18
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

주어진 조건대로 맵핑을 진행하면 쉽게 풀 수 있다.

성격 유형의 각 지표는 사전순으로 주어졌기 때문에 그대로 array에 저장.

성격의 점수를 저장하기 위한 map도 선언한다.

 

survey를 순회하면서 점수를 구한다.

front와 back으로 문자열을 두 개의 문자로 나눈다.

또한, choice[i]의 점수로 어느 성격 지표에 점수를 더할지 정한다.

만약 4점 미만이라면 front 성격에, 4점 초과라면 back 성격에 점수를 더한다.

 

점수를 더하는 부분은 calculator라는 함수로 정의한다.

만약 choice가 1 또는 7점이라면 3점을

choice가 2 또는 6 2점을

나머지는 1점을 더해준다.

더해줄 때, map에 해당 성격이 있다면 += 연산을, 그렇지 않다면 새롭게 저장해야 하기 때문에  = 연산을 진행한다.

 

계산이 끝나면 arr를 순회하면서 각 지표마다 높은 성격을 answer에 저장한다.

answer에 더할 성격인 char와 점수 score를 이용.

만약 char가 비어있다면 사전순으로 빠른 성격의 유형을 더해준다.

그렇지 않다면 char를 answer에 더해 답을 구한다.

function solution(survey, choices) {
    let answer = "";
    const arr = [["R", "T"], ["C", "F"], ["J", "M"], ["A", "N"]];
    const map = {};
    
    const calculator = (char, choice) => {
        let res = 1;
        
        if(choice === 1 || choice === 7){
            res = 3;
        } else if(choice === 2 || choice === 6){
            res = 2;
        }
        
        if(map[char]){
            map[char] += res;
        } else{
            map[char] = res;
        }
    }
    
    for(let i = 0; i < survey.length; i++){
        const front = survey[i][0];
        const back = survey[i][1];
        const choice = choices[i];
        
        if(choice < 4){
            calculator(front, choice);
        } else if(choice > 4){
            calculator(back, choice);
        }
    }
    
    for(let i = 0; i < 4; i++){
        let score = 0;
        let char = "";
        
        for(let j = 0; j < 2; j++){
            if(map[arr[i][j]]){
                if(score < map[arr[i][j]]){
                    char = arr[i][j];
                    score = map[arr[i][j]];
                }
            }
        }
        
        if(char === ""){
            answer += arr[i][0];
        } else{
            answer += char;
        }
    }
    
    return answer;
}
728x90
반응형