Javascript/문제 풀이

프로그래머스 3일차

아라라_ 2023. 5. 20. 23:41

“ 지연되는 프로젝트에 인력을 더 투입하면 오히려 더 늦어진다. ”

Frederick Philips Brooks
Mythical Man-Month 저자
728x90

최빈값 구하기

function solution(array) {
    // array의 최댓값만큼의 길이를 가진 새로운 배열 생성
    let newArray = new Array(Math.max(...array)+1).fill(0);
    // array 반복문을 통해, 해당 값에 해당하는 index의 값 += 1
    for (let i = 0; i < array.length; i++) {
        newArray[array[i]] += 1
    }
    // newArray의 최댓값에 해당 하는 index 출력
    // 만약 indexOf와 lastIndexOf가 지칭하는 값이 같으면, -1 출력 (중복인 경우 확인)
    if (newArray.indexOf(Math.max(...newArray)) !== newArray.lastIndexOf(Math.max(...newArray))) {
        return -1
    } else {
        return newArray.indexOf(Math.max(...newArray));
    };
}

array에서 최댓값을 찾아서 그 값에 1을 더한 길이를 가진 새로운 배열 newArray를 생성합니다. (Math.max(...array)는 배열에서 최댓값을 찾습니다.)
newArray를 0으로 초기화합니다. 이 배열은 array의 값과 인덱스를 매핑하여 해당 값이 등장한 횟수를 저장하기 위한 용도로 사용됩니다.
반복문을 사용하여 array를 순회하면서, 각 원소의 값에 해당하는 인덱스의 값을 1씩 증가시킵니다. 이렇게 함으로써 각 값이 등장한 횟수를 newArray에 저장합니다.
newArray에서 최댓값을 찾고, 해당 값의 인덱스를 반환합니다. (Math.max(...newArray)는 newArray에서 최댓값을 찾습니다. newArray.indexOf(Math.max(...newArray))는 최댓값의 첫 번째 등장 위치의 인덱스를 반환합니다.)
만약 newArray에서 최댓값이 중복되는 경우, 즉, 최댓값을 가진 값이 여러 개인 경우 -1을 반환합니다. 이는 중복된 값이 존재하여 가장 많이 등장하는 숫자를 결정할 수 없다는 의미입니다. (newArray.indexOf(Math.max(...newArray))와 newArray.lastIndexOf(Math.max(...newArray))를 비교하여 중복 여부를 확인합니다.)

 

 

짝수는 싫어요

function solution(n) {
  let answer = [];
  for (let i = 1; i <= n; i++) {
      if (i % 2 !== 0) answer.push(i);
  }
  return answer;
}

빈 배열 answer를 초기화합니다. 이 배열은 홀수를 저장하기 위한 용도로 사용됩니다.
반복문을 사용하여 1부터 n까지의 모든 수에 대해 순회합니다. (i 변수가 1부터 n까지 증가합니다.)
각 수 i가 홀수인지 확인합니다. (i % 2 !== 0 조건을 사용하여 홀수인지 판별합니다.)
i가 홀수인 경우, answer 배열에 i를 추가합니다. (answer.push(i)를 사용하여 i를 배열에 추가합니다.)
반복문이 종료되면, 배열 answer에 저장된 홀수들이 담긴 배열을 반환합니다.