본문 바로가기
알고리즘/Programmers

[TIL] 2023.03.17 Programmers 문제 풀기

by heereal 2023. 3. 17.

Today I Learned

  • Programmers 문제 풀기
  • 이력서 작성 완료 및 인텔리픽에 제출
  • 기술면접 준비

Programmers 문제 풀기

음양 더하기

나의 풀이

function solution(absolutes, signs) {
    return absolutes.map((num, i) => signs[i] && num ? num : -num).reduce((acc, cur) => acc + cur, 0);
}

map 돌려서 각 요소가 양수인지 음수인지 판단한 다음에 다시 reduce 메서드를 사용해서 모두 더한다. map이나 reduce 중에 하나의 메서드만 쓸 수 있는 방법도 있을까 잠시 고민해 봤지만 reduce 메서드에서 index를 쓸 수 있는지 모르겠어서 그냥 이렇게 제출했다.

 

 

다른 사람의 풀이

function solution(absolutes, signs) {
    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}

근데 reduce 메서드 하나만 이용해서 문제를 풀 수 있는 방법이 있었다. reduce에도 index를 쓸 수 있었구나...

 

리듀서 함수는 네 개의 인자를 가집니다.

  1. 누산기 (acc)
  2. 현재 값 (cur)
  3. 현재 인덱스 (idx)
  4. 원본 배열 (src)
function solution(absolutes, signs) {
    return absolutes.reduce((acc, cur, i) => acc + ( signs[i] ? cur : -cur ), 0);
}

reduce 메서드 하나만 이용해서 다시 풀어 본 풀이 방법

 

 

없는 숫자 더하기

나의 풀이

function solution(numbers) {
    return "123456789".split("").filter((num) => !numbers.includes(+num)).reduce((acc, cur) => acc + parseInt(cur), 0)
}

처음에 풀었던 방법. filter에다가 reduce까지 썼는데 reduce 하나로만 처리하는 방법은 없을까 고민하다가 풀이를 수정했다.

 

function solution(numbers) {
    return "123456789".split("").reduce((acc, cur) => acc + (numbers.includes(+cur) ? 0 : +cur), 0)
}

 

수정한 최종 답변. reduce 메서드의 cur(현재 값)에 삼항 연산자를 넣어서 filter 역할까지 한번에 처리해 봤다.

 

다른 사람의 풀이 

function solution(numbers) {
    return 45 - numbers.reduce((acc, cur) => acc + cur, 0);
}

그냥 0부터 9까지를 더한 45에서 numbers 배열의 모든 요소를 더한 값을 빼버리면 된다. 와우 이런 간단한 방법이😯

 

 

문제 풀면서 1~N까지의 숫자를 배열로 만들 수 있는 방법이 있는지 찾아봤다.

1. "123456789".split("") (숫자가 아닌 문자열로 배열이 만들어지지만 간단함)

2. const keyboard = Array.from({length:9}, (v,i)=>i+1));

3. const keyboard = Array(9).fill().map((v,i)=>i+1);

 

참고 https://mong-blog.tistory.com/entry/1N까지의-숫자-배열-만들기with-js

 


회고

드디어 이력서를 다 작성했다. 개별적인 피드백은 받지 못했지만 이력서 특강이나 공개 피드백 특강을 보면서 틈틈이 수정도 했다. 아직 기술면접 준비라는 큰 산이 남았지만 취업 준비가 차근차근 진행되고 있는 거 같다. 원래 캠프 끝나면 좀 쉬려고 했는데 거의 뭐 최종프로젝트 때와 비슷한 일정으로 생활하고 있네 🫠 오늘은 오랜만에 영화 한 편 보면서 좀 쉬어야겠다~~

 

 

댓글