ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 알고리즘 (나누어 떨어지는 숫자의 배열)
    카테고리 없음 2023. 4. 9. 21:08

    문제 설명

    array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.divisor로 나누어 떨어지는 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]

    입출력 예 설명

    입출력 예#1arr의 원소 중 5로 나누어 떨어지는 원소는 5와 10입니다. 따라서 [5, 10]을 리턴합니다.

    입출력 예#2arr의 모든 원소는 1으로 나누어 떨어집니다. 원소를 오름차순으로 정렬해 [1, 2, 3, 36]을 리턴합니다.

    입출력 예#33, 2, 6은 10으로 나누어 떨어지지 않습니다. 나누어 떨어지는 원소가 없으므로 [-1]을 리턴합니다.

     

     

    이문제를 처음엔 

    function solution(arr, divisor) {
      const newArr = arr.sort((a, b) => a - b)
      let result = []
      for (let i = 0; i < newArr.length; i++) {
        if (newArr[i] % divisor === 0) {
          result.push(newArr[i])
        }
      }
      return result.length > 0 ? result : [-1]
    }

    오름차순을 해주고 오름차순 된 배열을 가지고 for문 을 돌면서 그안에 조건문을 넣고 코드를 짰더니 프로그래머스에서 통과는 했으나 아무리 생각해도 뭔가 가독성이 떨어진다는 느낌을 받았다. 

     

    그러던중 남자친구가 filter를 사용해봐 라는 한마디에 문득!! 아.!! 유레카였다 

     

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

    그래서 다시 푼 풀이에는 진짜 filter하나로 코드가 간결해졌다.. 

     

    좋지 않은 습관을 알아버렸다

     

    내가 while문에 빠지면 그것만 생각나고 map을 계속 사용하다보면 무슨 문제던간에 map으로 푸는식만 떠오른다. 

     

    그래서 조언을 받은건 문제를 볼때 어떤걸 써서 풀지? 보다는 어떻게 풀어야할지 먼저 숫서를 정하고 그다음에 어떤걸 써야할지를 생각해봐야겠다. 

     

Designed by Tistory.