JavaScript - 프로그래머스 레벨 : 0(15) - ORDER BY '정답률'

먹보·2023년 1월 2일
0

1. 등수 매기기

문제 : 영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요.

function solution(score) {
    const ranking = {};

    const rank = score.map(([a,b]) => (a+b)/2).sort((a,b) => b-a)
    
    rank.forEach((a,i) => ranking[a] === undefined ? ranking[a] = i+1 : null)

    return score.map(([a,b]) => ranking[(a+b)/2])
}

🗒️코멘트 :
우선 처음 방향성은 다음과 같다.

  • 평균값을 가진 배열 생성
  • sort로 정렬 해주고 등수 값으로 변경

그 다음 막혔다..생각해보면 이걸 배열 내에서만 접근하려다 보니 등수를 매겨준 후 맵핑을 하려고 할 때 맵핑 기준이 없기에 막혀서 객체를 생성해 거기서 접근 하기로 하여 위와 같이 다시 함수를 생성해주었다.

  • 평균 값을 가지고 그것을 내림차순으로 정렬
  • forEach를 사용해서 객체 내에 존재하지 않을 시 점수를 키 값으로 그리고 그 점수의 인덱스에 1을 더한 값을 등수로 할당하고 만약 있으면 그냥 넘어가도록 설정

2. 특이한 정렬

문제 : 정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.

function solution(numlist, n) {
    return numlist.sort((a,b) => {
        const [aGab, bGab] = [Math.abs(a-n), Math.abs(b-n)]
        if(aGab === bGab) return b-a
        return aGab-bGab
    })
}

🗒️코멘트 : NULL

3. 저주의 숫자 3

문제 : 3x 마을 사람들은 3을 저주의 숫자라고 생각하기 때문에 3의 배수와 숫자 3을 사용하지 않습니다. 3x 마을 사람들의 숫자는 다음과 같습니다.

정수 n이 매개변수로 주어질 때, n을 3x 마을에서 사용하는 숫자로 바꿔 return하도록 solution 함수를 완성해주세요.

function solution(n) {
    const arr = [];
    let count = 0;

    for (i = 1; i <= n ; i++){
        count++
        if(count%3 == 0 || count.toString().includes('3')){
            do{
                count++
            }
            while (count%3 == 0 || count.toString().includes('3'))
            arr.push(count)
        } else {arr.push(count)}
    }
    return arr.pop()
}

🗒️코멘트 : NULL

4. 최빈 값 구하기

문제 : 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

function solution(array) {
    const freq = {};
    const newArr =[];

    for (let i = 0 ; i < array.length ; i++){
        freq[array[i]] == null ? freq[array[i]] = 1 : freq[array[i]]++
    }

    for (let j in freq){
        const grouping = [];
        grouping.push(j);
        grouping.push(freq[j])
        newArr.push(grouping)
    }
    newArr.sort((a,b) => b[1]-a[1])
  
    if(newArr.length > 1){
      return newArr[0][1] == newArr[1][1] ? -1 : Number(newArr[0][0]) 
    } else {
      return Number(newArr[0][0])
    }
}

🗒️코멘트 : NULL

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글