Wii Pointer #1 Tilt Normal
본문 바로가기
📂 𝐚𝐥𝐠𝐨𝐫𝐢𝐭𝐡𝐦/programmers

[알고리즘] 코딩테스트 연습코딩 기초 트레이닝배열의 길이에 따라 다른 연산하기

by 개발자_후니 2023. 9. 8.
728x90
반응형
  • 배열의 길이에 따라 다른 연산하기
문제 설명

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


제한사항
  • 1 ≤ arr의 길이 ≤ 1,000
  • 1 ≤ arr의 원소 ≤ 1,000
  • 1 ≤ n ≤ 1,000

입출력 예arrnresult
[49, 12, 100, 276, 33] 27 [76, 12, 127, 276, 60]
[444, 555, 666, 777] 100 [444, 655, 666, 877]

입출력 예 설명

입출력 예 #1

  • 예제 1번의 arr의 길이는 5로 홀수입니다. 따라서 arr의 짝수 인덱스 0, 2, 4에 주어진 n 값인 27을 더하면 [76, 12, 127, 276, 60]이 됩니다. 따라서 [76, 12, 127, 276, 60]를 return 합니다.

입출력 예 #1

  • 예제 2번의 arr의 길이는 4로 짝수입니다. 따라서 arr의 홀수 인덱스 1, 3에 주어진 n 값인 100을 더하면 [444, 655, 666, 877]이 됩니다. 따라서 [444, 655, 666, 877]를 return 합니다.

 

 

function solution(arr, n) {
    let answer = [];
    
    if(arr.length % 2 !== 0){
        for(let i = 0; i < arr.length; i++){
            if(i % 2 === 0){
                answer.push(arr[i] + n)
            } else {
                answer.push(arr[i])
            }
        }
    } else {
        for(let i = 0; i < arr.length; i++){
            if(i % 2 === 0){
                answer.push(arr[i])
            } else {
                answer.push(arr[i] + n)
            }
        }
    }
    
    return answer;
}

 

 

뭔가 중첩구조로 작성한 것 같아서 챗 GPT, 같은 팀원이 해결한 코드를 확인하기로 했다.

 

 

Chat GPT

function solution(arr, n) {
  const result = [...arr]; // 입력 배열을 복사하여 결과 배열을 초기화합니다.

  // 배열의 길이가 홀수일 때
  if (arr.length % 2 === 1) {
    for (let i = 0; i < arr.length; i += 2) {
      result[i] += n; // 짝수 인덱스 위치에 n을 더합니다.
    }
  } else { // 배열의 길이가 짝수일 때
    for (let i = 1; i < arr.length; i += 2) {
      result[i] += n; // 홀수 인덱스 위치에 n을 더합니다.
    }
  }

  return result;
}

 

팀원

function solution(arr, n) {
    return arr.map((v,i) => arr.length % 2 ===0? (i%2 !== 0? v+n:v) : (i % 2 === 0? v+n : v))
}

 

map() method 와 삼항연산자를 활용한 정답인데 정말 너무 간단했다.

 

forEach를 사용해서 결과를 도출할 수 있지만 그렇게 한다면 return에서 바로 반환할 수 없고 새로운 배열에다 forEach 돌린 배열을 할당해준 후 그 새로운 배열을 반환해야한다.

 

결과적으로 마지막 방법이 가장 간단하고 시인성이 좋은 것 같다.

728x90
반응형