준영이의 성장일기(FrontEnd)

2022 KAKAO TECH INTERNSHIP 문제 본문

코테 및 알고리즘

2022 KAKAO TECH INTERNSHIP 문제

Jay_Jung 2024. 5. 23. 20:23

네이버 부스트캠프 문제 해결력 테스트 준비를 위해서 프로그래머스를 시작하게 되었고 지금도 여전히 문제를 풀어보고 있다. 그리고 코딩테스트 스터디도 진행한지 어느덧 3달~4달이 지났지만 아직 문제를 해결하는데 있어서 진전이 없다라고 느꼈다. 그래서 느낀 것에 대해 원인 분석을 해보고 스터디 팀원들과 소통, 그리고 코딩테스트를 준비하는 방법에 대한 영상들을 참고하며 알게 된 개선점은 다음과 같다. 

<알게 된 점>

1. 코딩테스트 문제 풀이 시간은 30분 ~ 1시간으로 설정하고 문제를 풀기

-> 시간 안에 못 푼 문제는 과감하게 넘기고 부족한 부분 공부 및 보완

2. 문제를 풀 때 어떤 자료구조를 바탕으로 풀어야 할지 떠올리기

 

두 가지 알게된 점에 초점을 맞추어 다시 문제를 풀어보았고 오늘 푼 문제는 바로 2022 KAKAO TECH INTERNSHIP 문제이다!

 

 

<프로그래머스 문제>

 

 

 

 

 

 

 

<문제 핵심>

1. 해시 테이블 자료구조를 사용하여 MapSet 개념을 사용하는 것

2. forEach 고차 함수를 사용하여 Map에 값을 삽입한다.(key와 그리고 value)

-> 2024~2022년 문제 전부 forEach문을 사용한다!!

 

 

<풀이방법 및 순서도>

1. 해시 테이블의 종류인 Map을 만든다.

const choiceMap = new Map();

 

2. choices 배열을 forEach()을 통해 순회하고 각 선택지에 따른 점수를 더한다.

choices.forEach((choice, i) => {
    let type;
    if (choice < 4) type = survey[i][0];
    else if (choice > 4) type = survey[i][1];
    
    let score;
    if (choice === 1 || choice === 7) score = 3;
    else if (choice === 2 || choice === 6) score = 2;
    else if (choice === 3 || choice === 5) score = 1;
    
    choiceMap.set(type, (choiceMap.get(type) || 0) + score);
})

 

-> 4번째 선택지를 기준으로 작으면 첫번째 비동의 관련 선택지를 하면 받는 성격 유형으로 인식하고 크면 두번째 동의 관련 선택지를 하면 받는 성격 유형으로 인식한다. 그래서 survey[i][0], survey[i][1]로 구별된다. -> choice에 따라서 점수가 부여되고 set()을 통해 키-값 형태로 Map에 저장한다.

(type : 키, 값 :(choiceMap.get(type) || 0) + score)

 

 

3.  맵에 저장된 유형별 점수를 비교하고 각 지표별 유형을 선택하고 선택한 유형을 합쳐서 return 한다.

function setIndex(a, b) {
    const countA = choiceMap.get(a) || 0;
    const countB = choiceMap.get(b) || 0;
    return countA >= countB ? a : b;
}

let answer = '';
answer += setIndex('R', 'T');
answer += setIndex('C', 'F');
answer += setIndex('J', 'M');
answer += setIndex('A', 'N');

return answer;

 

 

<전체 코드>

function solution(survey, choices) {
    const choiceMap = new Map();

    choices.forEach((choice, i) => {
        let type;
        if (choice < 4) type = survey[i][0];
        else if (choice > 4) type = survey[i][1];
        
        let score;
        if (choice === 1 || choice === 7) score = 3;
        else if (choice === 2 || choice === 6) score = 2;
        else if (choice === 3 || choice === 5) score = 1;
        
        choiceMap.set(type, (choiceMap.get(type) || 0) + score);
    });

    function setIndex(a, b) {
        const countA = choiceMap.get(a) || 0;
        const countB = choiceMap.get(b) || 0;
        return countA >= countB ? a : b;
    }

    let answer = '';
    answer += setIndex('R', 'T');
    answer += setIndex('C', 'F');
    answer += setIndex('J', 'M');
    answer += setIndex('A', 'N');

    return answer;
}