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 요소의 인덱스도 활용해야 해서 바로 객체를 사용할 생각을 했는데
좋은 코드인지는 모르겠다