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

reduce 익히기

by 금화맘 2023. 6. 24.

오늘은 프로그래머스에서 n의 배수 고르기를 풀어봤다.

numlist라는 배열이 주어지고 n이라는 정수가 주어진다면 n의 배수를 numlist에서 뽑아 answer로 도추하면 되는거였다.

이걸 보고 reduce를 사용해봐야지 라고 생각했고, 만약 map을 쓴다면 filter도 써야해서 길어지니깐 reduce가 맞겠다고 생각했다.

 

reduce를 사용할때는 매번 첫번째 시작을 기입해야 해서 곤란했고 사용하기 어렵다고 매번 생각했는데 이번기회에 익혀보자는 맘으로 임했다.

function solution(n, numlist) {
    var answer = [];

//이건 if문을 사용해서 보낼때
   // numlist.reduce((acc, t) => {if(t % n === 0){answer.push(t)}}, 0 )

//이건 삼하연산자를 사용할 때
    numlist.reduce((acc, t) => {t % n === 0 ? answer.push(t): acc}, 0 )
    return answer;
}

if문을 사용해서 할때는 => 이게 있으니 if앞에서 {} 중괄호를 생략해서 

 numlist.reduce((acc, t) => if(t % n === 0){answer.push(t)}, 0 )

이렇게 작성했는데 자꾸 빨간줄도 쳐지고 무시하고 실행하기 했더니 컴파일러가 오류를 뱉어냈다. 삼항연산자를 쓸때 {}이게 있던 걸 기억하고 numlist.reduce((acc, t) => {if(t % n === 0){answer.push(t)}}, 0 ) 이렇게 작성하니 붉은 줄이 없어졌다.

굿굿. 

사실 삼항연산자를 쓸때도 answer.push(t): acc 이부분을 그냥 answer.push(t): },0 으로 이렇게 끝냈는데 자꾸 붉은 줄이 끄이고... 혹시나 싶어서 _},0 으로 작성도 해봤는데 붉은 줄이 그여서 acc가 안쓰인걸 기억하고 그냥 acc를 작성했더니 작동했다. 매우 만족스러운 결론이었다.

 

물론 이전에 이런 비슷한 걸 풀었던 기억이 있어서 쳇 gpt의 대화를 다 훑어봤다. 그때마다 쳇gpt는 예외처리를 했더라고.. 근데 여기선 예외처리를 할 필요가 없다고 생각되서 안했다.

 

예외처리도 예외가 있을 경우에나 만드는 거지 프로그래머스에서 예외가 있다면 예외가 있다고 적어놨을 거라 생각했다. 궂이 안적어 놨다면 예외처리를 할 필요가 없기 때문이라고 여겼다.

물론 어플리케이션을 만들어야 하는 경우라면 필수로 만들었을 것이다.