코딩/프로그래머스 코딩테스트

[프로그래머스] 나누어 떨어지는 숫자 배열

민쯔 2021. 12. 29. 17:35
728x90
반응형

안녕하세요. 민쯔입니다.😊
이번에는 나누어 떨어지는 숫자 배열 문제를 풀어보았습니다.

이 문제는 쉬운 편이고 바로 풀었습니다.👍
그럼 해결방안에 대해 설명하겠습니다.

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

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

  1. array의 각 element 중 divisor로 나누어 떨어지는 값 구하기
  2. 오름차순으로 정렬한 배열을 반환, divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환

이러한 순서로 풀었습니다.

 

array의 각 element 중 divisor로 나누어 떨어지는 값 구하기

let answer = arr.filter(x => x % divisor == 0);

filter를 사용해서 element 중 divisor로 나누어 떨어지는 값을 구하고 나오 값을 answer에 담아주었습니다.

  • filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

 

그래서 테스트 예제를 적용을 한다면

  1. 테스트 1
    • arr = [5, 9, 7, 10] -> answer = [5, 10]
  2. 테스트 2
    • arr = [2, 36, 1, 3] -> answer = [2, 36, 1, 3]
  3. 테스트 3
    • arr = [3, 2, 6] -> answer = []

이러한 값이 나옵니다.

 

오름차순으로 정렬한 배열을 반환, divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환

return answer.length > 0 ? answer.sort((a, b) => a-b) : [-1];

앞에 filter를 사용해서 divisor로 나누어 떨어지는 값을 구해서 answer에다가 넣어주었습니다.

문제를 읽어보면
"divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환" 하라고 했고,
"divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환" 하라고 했습니다.
이 말은 즉 divisor로 나누어 떨어지는 element가 있나, 없나를 판단하라는 말이 됩니다.

divisor로 나누어 떨어지는 element가 있나, 없나를 알려면
answer의 배열 길이가 0보다 크면 divisor로 나누어 떨어지는 element가 있다는 거고
작으면 divisor로 나누어 떨어지는 element가 없다는 것입니다. 
이 말을 코드로 작성한 게 answer.length > 0입니다.

조건문을 사용해서
answer.length > 0가 true이면 오름차순을 하면 되고
아닐 경우는 -1을 담아주면 되겠죠?

이번에도 삼항 연산자를 사용해 주었고,
이번에 또 프로그래머스 단골 문제인 오름차순도 나왔네요ㅋㅋ

오름차순은 너무 많이 설명한 것 같아서
전에 쓴 블로그 링크로 올릴게요. 👇

https://minzz.tistory.com/48

 

[자바스크립트] 오름차순, 내림차순 구하기

안녕하세요. 민쯔입니다.😊 프로그래머스를 풀다 보니 오름차순, 내림차순을 만들일이 많아지더라고요. 그래서 이번에 자바스크립트로 오름차순 내림차순을 만드는 방법에 대해 설명하겠습니

minzz.tistory.com

 

"divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환" 하라고 했는데
조금이라도 코드 줄을 줄이기 위해 삼항 연산자 앞에다가 return을 썼어요.
그래서 [-1]를 바로 써주어서 끝냈습니다.

728x90
반응형