코딩기록

string) 이어 붙인 수 / filter - 짝수, 홀수 & reduce배열 + 삼항연산자 본문

프론트/JS)코딩테스트

string) 이어 붙인 수 / filter - 짝수, 홀수 & reduce배열 + 삼항연산자

뽀짝코딩 2024. 8. 12. 00:44
728x90


문제 설명

정수가 담긴 리스트 nums가 주어집니다. nums의 홀수만 순서대로 이어 붙인 수와 짝수만 순서대로 이어 붙인 수의 합을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 2 ≤ nums의 길이 ≤ 10
  • 1 ≤ nums의 원소 ≤ 9
  • nums에는 적어도 한 개씩의 짝수와 홀수가 있습니다.

입출력 예

nums result
[3, 4, 5, 2, 1] 393
[5, 7, 8, 3] 581

 


입출력 예 설명

입출력 예 #1

  • 홀수만 이어 붙인 수는 351이고 짝수만 이어 붙인 수는 42입니다. 두 수의 합은 393입니다.

입출력 예 #2

  • 홀수만 이어 붙인 수는 573이고 짝수만 이어 붙인 수는 8입니다. 두 수의 합은 581입니다.
const solution = nums => {
  // do something
};

console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581

 

 

 


풀이

1번풀이

1. filter로 짝수, 홀수 나눠서 구하고 join으로 합해서 문자열로 반환.

2. 숫자로 형변환해서 더함.

 

// 이어 붙인 수
// nums의 홀수만 순서대로 이어 붙인 수와 
// 짝수만 순서대로 이어 붙인 수의 합을 return

const solution = nums => {
  const num1 = nums.filter(nums => nums % 2 !== 0).join('');
  const num2 = nums.filter(nums => nums % 2 === 0).join('');

  return Number(num1) + Number(num2);
};

console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581

 

2번풀이

reduce 배열, 삼항연산자

  • 2번째는 reduce를 활용해 누적값 자리에 배열을 넣고 삼항 연산자를 사용해 짝수와 홀수를 구분했다.
    1. 초기 값으로 ['', '']를 사용하여 각각의 문자열을 빈 문자열로 시작.
    2. num % 2 === 0   이 코드는 0이면 짝수 0이 아니면 홀수.
    3. 참이면 [evens + num, odds] 
      • evens + num: 현재 짝수 값을 문자열로 변환. 기존의 evens 문자열에 추가하고 odds는 변경없음.
    4. 거짓이면  [evens, odds + num] 
      • odds + num: 현재 홀수 값을 문자열로 변환하여 기존의 odds 문자열에 추가하고 evens는 변경없음.
    5. 배열의 모든 요소에 대해 반복하고 나서 짝수, 홀수 문자열이 저장되고 Number()로 정수 형변환하고 더하면 끝.

 

const solution = nums => {
  // ([evens, odds]): 현재까지의 누적 값
  // (num): 현재 배열에서 처리하고 있는 요소
  const [even, odd] = nums.reduce(([evens, odds], num) =>
    num % 2 === 0 ? [evens + num, odds] : [evens, odds + num],
    ['', '']
  );

  console.log(even);
  console.log(odd);

  return Number(even) + Number(odd);
};

console.log(solution([3, 4, 5, 2, 1])); // 393
console.log(solution([5, 7, 8, 3])); // 581

 

배열 [3, 4, 5, 2, 1] 코드 흐름.

  1. 초기값: ['', '']
  2. 3 (홀수): ['', '3']
  3. 4 (짝수): ['4', '3']
  4. 5 (홀수): ['4', '35']
  5. 2 (짝수): ['42', '35']
  6. 1 (홀수): ['42', '351']

결과적으로 even은 '42', odd는 '351'이 된다.

 

 

 

 

 

 

반응형
Comments