알고리즘🅰/프로그래머스

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

개발조각 2022. 2. 17. 12:00
728x90
반응형

2021.12.29에 푼 문제입니다.

 

이번 문제는 쉬운 편이라서 바로 풀었습니다.~

 

 


해결방안

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

해결방안 순서

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

 

1단계. arr배열의 각 element 중 divisor로 나누어 떨어지는 값 구하기

// 1단계. arr배열의 각 element 중 divisor로 나누어 떨어지는 값 구하기
let answer = arr.filter(x => x % divisor == 0);

arr배열의 원소중 divisor로 나누어지는 값만 추출하기 위해 filter() 메서드를 사용해주었습니다.

 

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

구문 : arr.filter(callback(element[, index[, array]])[, thisArg])

  • callback :각 요소를 시험할 함수. true를 반환하면 요소를 유지하고, false를 반환하면 버립니다. 다음 세 가지 매개변수를 받습니다.
  • element : 처리할 현재 요소.
  • index Optional : 처리할 현재 요소의 인덱스.
  • array Optional : filter를 호출한 배열.
  • thisArg Optional : callback을 실행할 때 this로 사용하는 값.
// filter() 메서드 예제
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];

const result = words.filter(word => word.length > 6);
console.log(result); // result = ["exuberant", "destruction", "present"]

 

테스트1로 설명 arr = [5, 9, 7, 10]; divisor = 5;

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

  • x는 5, 9, 7, 10 순으로 진행
  • x % divisor == 0 : 현재 arr배열의 원소가 divisor을 나누어 떨어지는지 나타냄
테스트 1. arr = [5, 9, 7, 10]; divisor = 5;
let answer = arr.filter(x => x % divisor == 0); -> x는 5, 9, 7, 10 순으로 진행
x = 5
arr.filter(5 => 5 % 5 == 0); -> true
answer =[5]

x = 9
arr.filter(9 => 9 % 5 == 0); -> false
answer =[5]

x = 7
arr.filter(7 => 7 % 5 == 0); -> false
answer =[5]

x = 10
arr.filter(10 => 10 % 5 == 0); -> true
answer =[5, 10]


테스트 2. arr = [2, 36, 1, 3]; divisor = 1;
let answer = arr.filter(x => x % divisor == 0); -> x는 2, 36, 1, 3 순으로 진행
x = 2
arr.filter(2 => 2 % 1 == 0); -> true
answer =[2]

x = 36
arr.filter(36 => 36 % 1 == 0); -> true
answer =[2, 36]

x = 1
arr.filter(1 => 1 % 1 == 0); -> true
answer =[2, 36, 1]

x = 3
arr.filter(3 => 3 % 1 == 0); -> true
answer =[2, 36, 1, 3]


테스트 3. arr = [3, 2, 6]; divisor = 10;
let answer = arr.filter(x => x % divisor == 0); -> x는 3, 2, 6 순으로 진행
x = 3
arr.filter(3 => 3 % 10 == 0); -> false
answer =[]

x = 2
arr.filter(2 => 2 % 10 == 0); -> false
answer =[]

x = 6
arr.filter(6 => 6 % 10 == 0); -> false
answer =[]

 

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

 

//2단계. 오름차순으로 정렬한 배열을 반환, divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환
return answer.length > 0 ? answer.sort((a, b) => a-b) : [-1];

1단계에서 구한 answer배열을 통해 오름차순으로 반환해주었고, 

answer배열에 아무런 원소가 없다면 -1를 반환해주었습니다.

 

여기서 answer배열에 원소가 있냐 없냐에 따라 반환값이 달라져서 삼항 연산자를 사용했고,

answer배열에 원소가 있을경우 오름차순으로 정렬해야 돼서 sort()메서드를 사용해 주었습니다.

프로그래머스에서 삼항 연산자와 sort()메서드를 지겹게 쓰고 있는 것 같아요.😆

 

삼항 연산자

구문 : 조건 ? true : false

  • 조건이 true이면 true를 실행
  • 조건이 false이면 false를 실행
MDN Web Docs
sort() 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다.

구문 : 배열.sort(정렬 순서를 정의하는 함수)

 

sort() 메서드

  • sort((a,b)=>a-b); -> 오름차순
  • sort((a,b)=>b-a); -> 내림차순

sort()메서드를 쓸 때 compare함수의 형식으로 쓰는 법을 알고 싶다면

실패율 해결방법 링크를 보시면 됩니다.👇

https://development-piece.tistory.com/7

 

[프로그래머스] 실패율

2021.10.25에 푼 문제입니다. 이번에도 역시나... 잘 안 풀려서ㅠ 남친님한테 SOS해서 풀었습니다.😂 남친님이 치는 코드 보면 존경스러워요ㅠㅠ 너무 잘해요. 그냥 봐도 이해가 되고 자바스크립트

development-piece.tistory.com

 

  • answer.length > 0 : (조건) answer배열길이가 0보다 클 경우
  • answer.sort((a, b) => a-b) : (조건이 true일 경우) answer배열 오름차순으로 정렬하기
  • [-1] : (조건이 false일 경우) answer배열을 [-1]로 바꾸기

 

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

테스트 1. arr = [5, 9, 7, 10]; divisor = 5;
answer =[5, 10]
answer.length > 0 -> 2 > 0 -> true -> answer.sort((a, b) => a-b)실행
answer =[5, 10]

테스트 2. arr = [2, 36, 1, 3]; divisor = 1;
answer =[2, 36, 1, 3]
answer.length > 0 -> 4 > 0 -> true -> answer.sort((a, b) => a-b)실행
answer =[1, 2, 3, 36]

테스트 3. arr = [3, 2, 6]; divisor = 10;
answer =[]
answer.length > 0 -> 4 > 0 -> false -> [-1]실행
answer =[-1]

여기까지 프로그래머스 나누어 떨어지는 숫자 배열 해결방안에 대해 설명해보았습니다.

728x90
반응형