본문 바로가기
자기개발/TIL

홀수 vs 짝수 js

by 금화맘 2023. 7. 25.

프로그래머스의 lv0문제인 홀수 vs 짝수 를 js로 풀어봤다.

num_list라는 배열이 주어질때 가장 첫번째 원소를 1번원소라고 했을 때 홀 수 번째 원수의 합과 짝수번째 원소 중 큰 값을 반환하는 문제였다.

num_list = [1,2,3,4,5]가 있다면

본래 1이 0번째 원소여야 하지만 1이 1이 된 샘으로 친다는 말이었다.

처음엔 하나의 코드 줄로 reduce를 사용해서 인덱스가 0,2,4가 되는 것들을 홀수, 1,3,5가 되는 것들을 짝수집합으로 해서 024가 되는 것을 찾는 코드를 조건으로 얘네끼리 더하고, 135가 되는 것들을 더해서 sort를 사용해서 큰 수를 1번째로 오게 한 다음 1번째를 반환하는 코드를 만들 계획이었다.

그런데 내가 로직을 짯지만 제대로 이해할 수가 없어서

홀수 부분, 짝수부분을 나눠서 더해 객체에 따로 저장했고, 그 객체의 값중 Math.max를 이용해서 둘 중 큰 수를 answer로 넣어서 답을 구하는 로직을 구해서 구현했다.

function solution(num_list) {
    var answer = 0;
    var h1 = num_list.reduce((a,c,i)=> (i+1)%2!==0? a+c :a,0)
    var g1 = num_list.reduce((a,c,i)=> (i+1)%2==0? a+c :a,0)
    // console.log(h1,g1)
    answer = Math.max(h1,g1)
    return answer;
}

 

이렇게 내가 원하는 로직이 있는데 능력부족이라 생각되서 그 로직대로 못푸면 다른 사람들의 풀이를 기대하게 됐다.

이렇게 다른 사람의 풀이를 보면 한줄로 완성한 사람이 있었다.

function solution(num_list) {
    return Math.max(...num_list.reduce(([odd,even],v,i) => i%2 ? [odd+v,even]:[odd,even+v] ,[0,0]));
}

이 코드는 주어진 값을 처음부터 [], v,i를 사용했고, 그 값에다가 또 다시 조건인 i%2를 해서 홀 짝을 나눠서 i%2에 해당하는 것을 [odd+v, even]에 넣고 아닌 것을 even+v로 했다, 게다가 초기값도 []에다가 0,0을 넣어줌으로써 이중배열로 푼거였다.

그래서 Math.max를 할때 ... 스프래드 연산을 통해 배열속 배열을 해체해서 큰 값을 반환할 수 있도록 한거였다.

내가 한 코드를 정말로 한 줄로 만들어 버린 거였다.

그래도 내가 이중배열을 배워야 하고 쓸 수 있어야 한다는 동기부여를 할 수 있어서 매우 좋은 자극이 됐다고 생각한다.

'자기개발 > TIL' 카테고리의 다른 글

js 문자열 바꿔서 찾  (0) 2023.07.27
o떼기 js  (1) 2023.07.27
l로만들기 js  (0) 2023.07.24
프로그래머스 js 배열비교하기  (0) 2023.07.22
공백으로 구분하기2 js로 풀기  (0) 2023.07.21