TIL 60 day 프로그래머스

Winney·2021년 1월 10일
1
post-thumbnail

1. 나누어 떨어지는 숫자 배열

  • array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수
  • visor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환
  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.
  • 입출력 예시
    arr,divisor => return
    ([5, 9, 7, 10], 5) => [5, 10],
    ([2, 36, 1, 3], 1) => [1, 2, 3, 36],
    ([3,2,6], 10) => [-1]

수정 전

function solution(arr, divisor) {
    var answer = [];
    for(let num of arr) {
        if(num % divisor === 0) {
            answer.push(num);
        }
    }
  if(answer.length === 0) {
    answer.push(-1);
  }
    answer.sort(function(a, b) {
      return a- b;
    });
    return answer;
}

생각의 흐름대로 작성한 코드이다.
1. 배열 내의 숫자를 divisor로 나눈 것 중 나머지가 0인걸 찾아서 배열에 넣는다.
2. 배열 내 모든 숫자의 나머지가 0이 아닐 수 있기 때문에 빈배열을 생각하고 빈 배열일 경우 -1를 넣는다.
3. 정렬한다.

통과는 되었지만 작성하면서도 코드가 너무 길다고 생각했다.
다른 분의 풀이에 filter가 있는 것도 있길래 filter를 써서 수정해보았다.

수정 후

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

역시 메서드를 잘 써야한다.
sort내의 함수도 화살표 함수를 썼고 한 줄에 쓸 수 있으니 return도 생략이 되었다.
코드 길이가 절반으로 줄어들었다!
내가 쓴 코드랑 같은가 싶어서 다른 분들의 코드를 다시 유심히 봤더니 역시 내 코드는 부족했다.

다른 분 코드

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

나는 아직 한 줄에 하나의 생각만 하게되어서 null 값을 준 부분이었는데 확실히 바로 붙여도 되는 부분이었다.

항상 느끼고 있지만 나도 모르게 for문을 먼저 생각하게된다.
메서드를 먼저 생각할 수 있도록 해야겠다.

profile
프론트엔드 엔지니어

0개의 댓글