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

프로그래머스 0단계 - 카운트 다운 / 홀수 vs 짝수

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

카운트 다운

정수 start_num와 end_nu가 주어질 때, start_num에서 end_num까지 1씩 감소하는 수들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

  • 0 ≤ end_num ≤ start_num ≤ 50
function solution(start_num, end_num) {
  const answer = [];
  let i = start_num;
  while(i >= end_num) {
    answer.push(i);
    i--;
  }
  return answer;
}

// 다른 사람의 풀이
const solution = (start, end) => Array(start-end+1).fill(start).map((v,i)=>v-i);

끝나는 조건이 분명하므로, while문을 사용하여 해결하였다.

 

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

1) Array()를 통해 필요한 갯수만큼 길이를 갖는 배열을 생성한다.

2) 1씩 줄어드는 배열이므로, fill(start)를 사용하여 시작값을 설정한다.

3) map((v, i) => v-i) : 배열의 요소를 v라고 하고, 그 요소들에 각각 인덱스 i만큼의 배열로 반환한다.


홀수 vs 짝수

정수 리스트 num_list가 주어집니다. 가장 첫 번째 원소를 1번 원소라고 할때, 홀수 번째 원소들의 합과 짝수 번째 원수들의 합 중 큰 값을 return 하도록 solution 함수를 완성해주세요. 두 값이 같을 경우 그 값을 return합니다.

  • 5 ≤ num_list의 길이 ≤ 50
  • -9 ≤ num_list의 원소 ≤ 9
function solution(num_list) {
  let oddSum = 0;
  let evenSum = 0;
  for (let i = 0; i < num_list.length; i++) {
    i % 2 !== 0 ? oddSum += num_list[i] : evenSum += num_list[i];
  }
  return oddSum > evenSum ? oddSum : evenSum;
}

// 다른 사람의 풀이
function solution(num_list) {
  let odd = 0;
  let even = 0;
  num_list.forEach((x,i) => i%2 == 0 ? even += x : odd += x);
  return Math.max(odd, even);
}

홀수 번째와 짝수 번째 요소들의 각각에 대한 합을 구하는 문제이므로, 배열의 요소를 순환하는 인덱스의 값을 더하도록 한다.

 

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

map()으로 해결한 풀이도 있었지만, forEach()로 해결한 것에 대해 파악하고자 가져왔다.

1) forEach() 메소드는 원본 배열을 수정하지 않으므로, 새로운 배열을 생성할 필요가 없다.

2) forEach((x, i) => { ... }배열 num_list의 요소들을 변수명 x로 하고, 인덱스를 i라고 한다.

3) 요소의 위치에 따라 각각 홀수와 짝수에 더해준다.

댓글