문제
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absoluter와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return하도록 solution 함수를 완성해주세요.
제한 사항
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i]의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력 예
absolutes = [4,7,12];
signs = [true, false, true];
result = 9
- signs가 [true, false, true]이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
- 따라서 세 수의 합인 9를 리턴해야 합니다.
나의 풀이 1
처음 풀이 방식은 for문을 돌려 sign[i]가 true이면 absolutes[i] * 1을 해주고 false이면 absolutes[i] * (-1)을 해주어서 새로운 배열에 넣어 그 배열의 모든 element 값을 더하는 식으로 계산하려고 했다.
function solution(absolutes, signs) {
var answer = 123456789;
for(let i =0; i< signs.length; i++){
if(signs[i]===true){
return absolutes[i]*1;
} else {
return absolutes[i]*(-1);
}
}
return answer;
}
let absolutes = [1,2,3];
let signs = [false,true,true];
let addArr =[];
for(let i=0;i<absolutes.length;i++){
if(signs[i]===false){
signs[i] = -1;
}
addArr.push(absolutes[i] * signs[i]);
}
console.log(addArr);
나의 풀이 2
하지만 얼마 지나지 않아 바로 두 개의 사실을 깨달았다.
1. signs가 true이면 absolutes에 1을 곱해도 원래의 값과 동일하기 때문에 의미가 없다. 따라서 if else를 써줄 것이 아니라 if문에 false일 경우만 넣고 새로 바꿔주면 됐다.
2. '굳이 새로운 배열을 만들어 줄 필요 없이 그냥 배열 안의 element 값을 다 더해주면 되는건데? ' 라는 생각이 번뜩 들어 새로운 배열에 할당해주는 부분을 없애고 total이라는 변수를 만들어 반복문이 돌아갈 때마다 total += element을 해줬다.
let total = 0;
for(let i=0;i<absolutes.length;i++){
if(signs[i]===false){
signs[i] = -1;
}
total += absolutes[i] * signs[i]
}
console.log(total);
'Algorithm' 카테고리의 다른 글
평균 구하기 [프로그래머스] (0) | 2023.10.16 |
---|---|
문자열 내 마음대로 정렬하기 [프로그래머스] (1) | 2023.10.13 |
문자열 내 p와 y의 개수 [프로그래머스] (0) | 2023.10.13 |
문자열의 길이 반환 (0) | 2023.10.12 |
배열에서 짝수만 추출하기 (0) | 2023.10.12 |