한 걸음씩 기록하며

[프로그래머스 코딩테스트] 음양 더하기 본문

알고리즘 & 코딩테스트

[프로그래머스 코딩테스트] 음양 더하기

Haksae 2022. 1. 14. 23:41

[음양 더하기]

문제 설명 :
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

 

⛏제한 조건

  • absolutes의 길이는 1 이상 1,000 이하입니다.
    • absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
  • signs의 길이는 absolutes의 길이와 같습니다.
    • signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

 

📁 입출력 예시

 

👉🏻  답안

function solution(absolutes, signs) {
  let answer = 0;
  for (let i = 0; i < signs.length; i++) {
    if (signs[i] === false) {   		// if문으로 signs의 value를 부르고 false(-) 라면
      answer += absolutes[i] * -1;	 	// absolutes의 value에 -1을 곱하여 음수를 전환
    } else {
      answer += absolutes[i];
    }
  }
  return answer;
}

 

 

📑  간단한 설명

if문으로 음수 조건 걸고, 실행문에서 -1 곱하여 계산하였습니다.

뭔가 if문만 많이 사용하고 다른 함수들은 잘 살펴보지 않는 것 같아서 좀 그렇지만.. 다른 것 보고 많이 공부해야겠습니다..

 

💪🏻 공부하면 좋을 답안

function solution(absolutes, signs) {
    return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
  • * .reduce(acc, cur, idx, src) : acc는 누적 값, cur은 현재값, idx는 인덱스, src는 원본배열
    • map이 배열의 각 요소를 변형한다면 reduce는 배열 자체를 변형합니다.(reduce라는 이름은 이 메서드가 보통 배열을 값 하나로 줄이는 데 쓰이기 때문에 붙었다)
    • 공부하면서 해석한 것은 아래에 붙여놓았다.
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);

// absolutes배열의 reduce 함수 실행 (아래 설명 칸은 백틱을 쓰겠음)
// 함수의 파라미터는 (acc`누적값`, val`현재값`, i`인덱스` => acc`누적값` + (val`현재값` * (sign[i]`부호` ? 1 : -1)), 0`src 혹은 initialValue);

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

http://reduce.surge.sh/   (reduce 함수를 시각화해서 잘 보여주는 사이트)

Comments