본문 바로가기
코딩테스트/프로그래머스 0단계 - 기초 트레이닝

프로그래머스 0단계 - 배열 만들기 1 / n개 간격의 원소들

by 학습하는 청년 2024. 4. 2.

배열 만들기 1

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

  • 1 ≤ n ≤ 1,000,000
  • 1 ≤ k ≤ min(1,000, n)
function solution(n, k) {
  const numArr = [];
  const result = [];
  for (let i = 0; i < n; i++) {
    numArr.push(i + 1);
    if (numArr[i] % k === 0) result.push(numArr[i]);
  }
  return result;
}

// 다른 사람의 풀이
function solution(n, k) {
  let answer = [];
  for(let i = k; i <= n; i+=k){
    answer.push(i)
  }
  return answer;
}

1) 순회할 numArr 배열과 결과를 넣을  result 배열을 만든다.

2) 반복문을 돌면서, 순회할 배열을 완성시켜준다.

3) 완성된 배열에서 값이 k의 배수인 경우에는 result 배열에 넣어준다.

 

지금 보니.. 굳이 numArr 배열을 만들 필요가 없었다는 생각이 든다.

다른 사람의 풀이가 그 모습이네... 단순하게 생각을 해야하는데... 어휴


n개 간격의 원소들

정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

  • 5 ≤ num_list의 길이 ≤ 20
  • 1 ≤ num_list의 원소 ≤ 9
  • 1 ≤ n ≤ 4
function solution(num_list, n) {
  const answer = [];
  for(let i = 0; i < num_list.length; i+=n) {
    answer.push(num_list[i]);
  }
  return answer;
}

// 다른 사람의 풀이
const solution = (num_list, n) => num_list.filter((_, i) => !(i % n))

위의 문제와 같은 문제라는 생각이 들었다. 증감조건식을 설정하여, 바로 배열에 넣는 형태로 해결하였다.

 

<다른 사람의 풀이에 대한 이해>

1) num_list는 정수를 담고 있는 배열이다.

2) filter()는 원본배열을 수정한다.

3) 현재 배열의 요소는 쓰지 않고, 인덱스만 사용하겠다. // filter((_, i)) => 의 뜻

4) num_list의 배열의 인덱스(i)가 정수(n)으로 나누었을 때, 0이 아닌 것을 요소로 한다. // !(i % n)의 뜻

댓글