본문 바로가기
코테연습

76. 나누어 떨어지는 숫자 배열 Javascript

by hxunz 2022. 7. 7.

https://school.programmers.co.kr/learn/courses/30/lessons/12910

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하라
  • 주어진 자료는 무엇인가?
     - arr = 자연수를 담은 배열
     - 정수 divisor
  • 조건은 무엇인가?
     - 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
     - array는 길이 1 이상인 배열입니다.

2. 계획

  • 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
     - filter
  1. map을 사용해서 arr의 elements를 하나씩 순회한다. 
  2. 이때 elements가 divisor로 나눠지는 경우의 숫자만 filter를 이용해서 거른다.
  3. 이 새로운 배열을 오름차순으로 정렬 시킨다.
  4. 이 배열의 길이가 0 초과면 이 배열을 리턴하고 그렇지 않으면 [-1]을 리턴한다. 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (arr, divisor) => {
  const newArr = arr.filter(number => number % divisor === 0).sort((a,b) => a-b);

  return (newArr.length > 0) ? newArr : [-1];
};

test('divide', () => {
  expect(solution([5, 9, 7, 10],5)).toEqual([5, 10]);
});

 

 

처음에 코드를 작성하고 테스트를 돌려보면서 오름차순 정렬이 안되어 있다는 것을 알게 되었다. 
그래서 배열을 오름차순 정렬을 시켜줬다. 
그리고 elements가 divisor로 나눠지지 않는 경우에는 [-1]을 리턴해야하는데 
이 부분에 대한 처리를 안해줘서 테스트가 통과되지 않았다. 
그 후에 처리를 해주고 테스트를 전부 다 통과 하긴 했는데 
처음부터 계획을 작성하는 단계에서 조건이랑 문제를 다시 한번 더 생각해보고 작성해야겠다는 생각이 들었다.
앞으로는 문제랑 조건을 꼼꼼히 봐야겠다.

'코테연습' 카테고리의 다른 글

78. 타켓 넘버 Javascript  (0) 2022.07.26
77. 두 정수 사이의 합 Javascript  (0) 2022.07.20
75. 소수찾기 Javascript  (0) 2022.07.05
74. 피보나치 수 Javascript  (0) 2022.07.04
73. 프린터 Javascript  (0) 2022.07.01

댓글