반응형
Notice
Recent Posts
Archives
Today
Total
Link
관리 메뉴

꾸준하게

[JS코테] 모의고사 - 다시 확인❗ 본문

JS코딩테스트

[JS코테] 모의고사 - 다시 확인❗

DaeunCoding 2024. 1. 3. 09:47
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

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

programmers.co.kr

 

[나의 풀이]

function solution(answers) {
    const onePick = [1, 2, 3, 4, 5];
    const twoPick = [2, 1, 2, 3, 2, 4, 2, 5];
    const thrPick = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    let correctArr = [0, 0, 0];
    for(let i = 0; i < answers.length; i++) {
        answers[i % onePick.length] === onePick[i] && correctArr[0]++;
        answers[i % twoPick.length] === twoPick[i] && correctArr[1]++;
        answers[i % thrPick.length] === thrPick[i] && correctArr[2]++;
    }
    const maxNum = Math.max(...correctArr);
    return correctArr.map((item, index) => item === maxNum ? index+1 : 0).filter(item => item !== 0);
}

 

나의 첫 번째 풀이는 채점 결과 실패했다.

 

내일 다시 풀어보자.

 


 

.. 결국 며칠째 풀어보다가 포기했다.

다른 사람들의 풀이를 분석해보자!

 

[다른 풀이]

function solution(answers) {
    var answer = [];
    const man1 = [1, 2, 3, 4, 5];
    const man2 = [2, 1, 2, 3, 2, 4, 2, 5];
    const man3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    let count = [0, 0, 0];

    for(let i = 0; i < answers.length; i++) {
        if(answers[i] == man1[i % man1.length]) count[0]++;
        if(answers[i] == man2[i % man2.length]) count[1]++;
        if(answers[i] == man3[i % man3.length]) count[2]++;
    }

    const max = Math.max(count[0], count[1], count[2]);
    for(let i = 0; i < count.length; i++) {
        if(max == count[i]) answer.push(i + 1);
    }

    return answer;
}

 

일단 내 풀이와 매우 흡사해보인다.

 

내 풀이를 여러 방면에서 수정해본 결과, 내 풀이와 저 풀이의 차이는 

중간 for문 안에 있는

answers[i % onePick.length] === onePick[i] && correctArr[0]++;
answers[i % twoPick.length] === twoPick[i] && correctArr[1]++;
answers[i % thrPick.length] === thrPick[i] && correctArr[2]++;

 

이 부분과

if(answers[i] == man1[i % man1.length]) count[0]++;
if(answers[i] == man2[i % man2.length]) count[1]++;
if(answers[i] == man3[i % man3.length]) count[2]++;

 

이 부분이었다.

 

즉, 나는 배열 answers의 index에서 각각 세 배열의 길이를 나눈 나머지와 그 배열의 index가 같으면 count를 했고,

다른 풀이는 각 세 배열의 index에서 그 배열의 길이를 나눈 나머지와 answers의 index가 같으면 count를 했다.

 

 

이 문제로 너무 오랜 시간 고민해서 다른 문제를 풀며 조금 머리를 식힌 후 다시 와야겠다.

...그럴거면 답 보지 말걸..!!!!

 

어쨌든 다음에 다시 확인하기!

728x90
반응형

'JS코딩테스트' 카테고리의 다른 글

[JS코테] 기사단원의 무기 - 다시 풀기❗  (1) 2024.01.29
[JS코테] 소수 만들기 - 리팩토링해보기❗  (0) 2024.01.13
[JS코테] 2016년  (2) 2024.01.02
[JS코테] 과일 장수  (0) 2023.12.26
[JS코테] 카드 뭉치  (0) 2023.08.29