문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
| [4,7,12] | [true,false,true] | 9 |
| [1,2,3] | [false,false,true] | 0 |
A. 생각한 풀이과정
1. 두 배열을 새로운 객체로 만들기
2. 반복문 사용해서 두 배열을 비교해서 false 일 경우 음수로 만들고 만들어진 값들 새 배열에 넣기
3. 새 배열 계산
처음 생각한 방법은 위와 같은데, 두 배열을 비교하는 반복문을 쓰기보다, Boolean 배열을 키로 생각하고 Number 배열의 값을 비교하는 게 나을 거 같다는 생각이 들어서...(그게 그거일 수도 😥,,,) 사실 뭐가 나은지 확신은 없지만 그래도 뭔가
새로운 방법을 사용해보고 싶어서 결국엔 do while 문을 사용해서 원하는 배열값을 얻는 방향으로 풀이 방법을 정했다.
B. 해결과정
1. 빈 배열 선언, 루프 돌려줄 i 초기값 설정
const solution = () => {
let newObj = []
let i = 0;
}
2. do while문을 사용해서 false 인 값에 *-1을 해서 음수 변환한 배열 리턴
const solution = () => {
let newObj = []
let i = 0;
do {
newObj.push(signs[i] === false ? absolutes[i]*-1 : absolutes[i])
i += 1
} while(absolutes.length > i)
}
3. 조건문 돌려준 후 얻은 newObj를 reduce함수 사용해서 더해주기
const solution = () => {
let newObj = []
let i = 0;
do {
newObj.push(signs[i] === false ? absolutes[i]*-1 : absolutes[i])
i += 1
} while(absolutes.length > i)
const sum = newObj.reduce((a,b) => a+b)
return (sum)
}

결과가 잘 나오긴 했음!! 다른 사람 풀이를 보기 전까지는 나름 나도 잘 쓴 거 같다고 생각했는데 더 간단한 방법이 있었음.
reduce함수 인자에 i를 넣어서 해당 값이 배열 순서를 나타내는 지표로 사용되도록 한 방법이 있었음.
function solution(absolutes, signs) {
return absolutes.reduce((acc, val, i) => acc + (val * (signs[i] ? 1 : -1)), 0);
}
참 깔끔하다,,! ㅎ 위와 같은 방식으로 하면 do while문을 써주지 않아도 되어서 훨씬 코드가 축약된다.
'알고리즘' 카테고리의 다른 글
| [프로그래머스][JS] Lv.1 없는 숫자 더하기 (1) | 2022.10.11 |
|---|---|
| [프로그래머스][JS] Lv.1 나누어 떨어지는 숫자 배열 (1) | 2022.09.23 |
| [프로그래머스][JS] Lv.1 두 정수 사이의 합 (1) | 2022.09.21 |
| [프로그래머스][JS] Lv.1 가운데 글자 가져오기 (0) | 2022.09.19 |
| [프로그래머스][JS] Lv.1 서울에서 김서방 찾기 (0) | 2022.09.15 |