Programmers

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

winter17 2023. 7. 12. 18:41

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

 

프로그래머스

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

programmers.co.kr

풀이 과정1

function solution(rank, attendance) {
    let obj = {}
    for (let i = 0; i < rank.length; i++){
        if (attendance[i] === true){ // true인 경우만 골라서 rank요소와 요소의 인덱스만 객체 생성
            obj[i] = rank[i]
        }
    }
    // console.log(obj) { '1': 7, '2': 2, '3': 5, '4': 4 }
    
    // value만 뽑아서 정렬
    const values = Object.values(obj).sort((a, b) => a - b)
    // console.log(values) [ 2, 4, 5, 7 ]
    
    // value 배열의 요소와 obj[value]가 일치하면 해당 key 값을 total에 push
    let total = []
    for (let i = 0; i < values.length; i++){
        for (const [key, value] of Object.entries(obj)){ 
            if (values[i] === value){
                total.push(key)
            }   
        }
    }
    // console.log(total) [ '2', '4', '3', '1' ]
    
    // 정수 변환
    const num = total.map(item => parseInt(item))
	console.log(num) // [ 2, 4, 3, 1 ]
    
    return 10000 * num[0] + 100 * num[1] + num[2]
}

// rank = [3, 7, 2, 5, 4, 6, 1] 
// attendance = [false, true, true, true, true, false, false]

 

 

풀이 과정2

function solution(rank, attendance) {
    var answer = 0;
    let newRank = []
    for (let i = 0; i < attendance.length; i++){
        if (attendance[i]){
            newRank.push(rank[i])
        }
    }
    const sorted = newRank.sort((a, b) => a - b)
    // 10000 × a + 100 × b + c
    answer = (10000 * rank.indexOf(sorted[0])) + (100 * rank.indexOf(sorted[1])) + rank.indexOf(sorted[2])
    return answer;
}

리뷰

문제 통과는 했기 때문에 성능상의 문제는 없겠지만 rank 요소의 인덱스도 활용해야 해서 바로 객체를 사용할 생각을 했는데

좋은 코드인지는 모르겠다