본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 103 - 나누어 떨어지는 숫자 배열)

728x90

 

# 문제

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.



# 답안

// 1. 입력: 자연수 배열 arr, 자연수 divisor
// 2. 출력: divisor로 떨어지는 arr의 element를 모은 배열(오름차순) , 없으면 -1 


// < 방법 1 : 반복문 돌리기 >
// answer = []
// 반복문 돌릴건데, 
// if (arr[i] % divisor === 0) 이면, answer.push(arr[i])
// 다 돌리고나서 if (answer === []) 이면, return -1, 아니면 return answer(오름차순정렬해서)
 
function solution(arr, divisor) {
  let answer = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] % divisor === 0) {
      answer.push(arr[i]);
    }
  }
  return answer.length === 0 ? [-1] : answer.sort((a, b) => a - b);
}


// < 방법 2 : filter 사용 >
// filter로 arr의 element 중 (divisor == 0)인 것만 남기기

function solution(arr, divisor) {
  let answer = arr.filter((v) => v % divisor == 0);
  return answer.length == 0 ? [-1] : answer.sort((a, b) => a - b);
}



# 인사이트

// 배열이 비어있는지 확인할 때 answer === [] 이렇게 쓰면 안됨.
// 왜냐면 빈 배열을 가리리키는 두개의 배열이 (빈 배열을 생성할 때 마다 새로운 객체가 생성 되기 때문에) 서로 다른 객체이기 때문이다.
// 따라서 배열을 비어 있는지 확인 할 때에는 길이를 비교 하는 것이 올바른 방법임 // answer.length == 0
728x90