코딩테스트(JS)/구현&문자열

[javascript] 프로그래머스 / 전국 대회 선발 고사 / lv0

seseyeyo 2023. 10. 30. 23:24

 

function solution(rank, attendance) {
    let answer = 0;
    let cnt = 0;
    let mul = [10000, 100, 1];

    for (let i = 1; cnt < 3; i++) {
        let idx = rank.indexOf(i);
        if (attendance[idx]) {
            answer += idx * mul[cnt];
            cnt++;
        }
    }
    
    return answer;
}

정답을 푼 후에 다른 분들의 풀이를 보니 sort와 filter를 많이 이용하셨다..

나는 일단 이렇게 해결하였다.

먼저 rank안에서 i의 인덱스를 찾아 idx에 저장해준다.

attendance[idx]가 true이면 answer에 idx * mul[cnt]를 더해준다. (곱해줄 수들을 담을 배열을 mul안에 따로 넣어주었다)

그리고 cnt를 증가시켜 준다.

for문을 cnt가 3보다 작을 때까지만 진행시켜준다.

function solution(rank, attendance) {
    let cnt = 0;
    let arr = [];
    for (let i = 1; cnt < 3; i++) {
        let idx = rank.indexOf(i);
        if (attendance[idx]) {
            arr.push(idx);
            cnt++;
        }
    }
    return arr[0] * 10000 + arr[1] * 100 + arr[2];
}

살짝 다르게 바꿔보았다.

sort랑 filter등을 쓰는 게 더 효율적인 방법인지는 모르겠다!