<Programmers> 배열의 길이에 따라 다른 연산

·2024년 7월 11일
0

프로그래머스

목록 보기
6/18
post-thumbnail

문제

정수 배열 arr정수 n이 매개변수로 주어집니다.
arr의 길이가 홀수라면 arr의 모든 짝수 인덱스 위치에 n을 더한 배열을,
arr의 길이가 짝수라면 arr의 모든 홀수 인덱스 위치에 n을 더한 배열을 return 하는 solution 함수를 작성해 주세요.


문제 접근

  1. 배열의 길이가 짝수인지 홀수인지 판별한다. (0도 짝수 인덱스로 취급한다.)
  2. 배열을 돌면서 n을 더해준다. 홀수라면 index 0,2,4... | 짝수라면 index 1,3,5...

문제 풀이

function solution(arr, n) {
  const result =
    arr.length % 2 === 0
      ? arr.map((num, idx) => (idx % 2 === 0 ? num : num + n))
      : arr.map((num, idx) => (idx % 2 !== 0 ? num : num + n));

  return result;
}

solution([49, 12, 100, 276, 33], 27); // [76, 12, 127, 276, 60]

다른 풀이

1️⃣ 번 풀이

function solution(arr, n) {
  const result = arr.map((num, idx) => {
    if (arr.length % 2 === 0) {
      // 배열의 길이가 짝수일 때
      return idx % 2 !== 0 ? num + n : num;
    } else {
      // 배열의 길이가 홀수일 때
      return idx % 2 === 0 ? num + n : num;
    }
  });

  return result;
}

2️⃣ 번 풀이

const solution = (arr, n) => arr.map((num, idx) => (
    arr.length % 2 !== idx % 2
    ? num + n
    : num
))

문제접근 회고

map메서드가 아닌 filter로 처음에 접근했었다.

짝수와 홀수를 거른다라는 생각에서 비롯되었는데, 이는 잘못된 접근이었다.

왜 잘못된 접근이었나⁉️

  1. filter 메서드는 주어진 조건을 만족하는 요소만을 포함하는 새로운 배열을 반환한다.
    따라서 요소를 변환하거나 조작하는 데는 적합하지 않습니다
    2.map 메서드는 각 요소를 원하는 방식으로 변환하여 새로운 배열을 반환할 수 있다.

정리

map 메서드는 데이터를 재가공하는데 유용한 메서드이고,
filter 메서드는 데이터 가공이 목적이 아니라 기존 데이터에서 특정한 조건의 데이터를 추출한다.

profile
- 배움에는 끝이 없다.

0개의 댓글