[문제설명]
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
[제한사항]
- absolutes의 길이는 1 이상 1,000 이하입니다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
- signs의 길이는 absolutes의 길이와 같습니다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
입출력예)
absolutes | signs | result |
---|---|---|
[4,7,12] | [true,false,true] | 9 |
[1,2,3] | [false,false,true] | 0 |
signs의 요소값이 true나 false일때에 따라 음수나 양수가 나오도록 조건식을 만들때 시행착오가 있었다. 처음에 나는 if(signs[i]===true)
를 넣어 absolutes를 음수와 양수로 출력할 수 있도록 코드를 짜려고 했는데 자꾸 저 if문이 틀렸다고 나왔다. 그래서 true
로 바꿔보기도 하고 ===를 ==로 바꿔보기도 하다가 true란 값이 어떻게 나오는지 파악하지 못하고 있다는 사실을 깨닫고 찾아보았다. 그래서 값을 boolean으로 변환하는 방법에 대해 서치해보았다.
부정 연산자
!
뒤의 값이 truthy이면 false , falsy이면 true 를 반환하는 성질을 이용해서 이중 부정을 통해 값을 boolean 타입으로 변환할 수 있다. 만약 부정한 값을 다시 복원하고 싶다면!!
를 값 앞에 둬서 부정을 다시 부정해서 복원하면 된다.
✅추가로 알면 좋을 것들!
- number타입 중 0만 false를 반환함.
- 문자열도 ""(빈 값)만 false를 반환함.
- null,undefined,NaN은 flase로 간주함.
참고사이트:[JavaScript]Boolean으로 변환하는 방법
이걸 보고 if문을 삼항 연산자로 바꿔 코드를 짰고 잘 돌아갔다.
[최종코드]
function solution(absolutes, signs) {
var sum=0;
for(i=0;i<signs.length;i++){
let result = !signs[i]? absolutes[i]*(-1):absolutes[i]
sum+=result;}
return sum;
}
지금 이노캠 알고리즘 1주차라 프로그래머스를 열심히 푸는 중인데 처음엔 당황과 자괴감의 연속이었지만 점점 구조에 대해 알아가고 있다고 느꼈다. for문이나 if문같은 것들이 구조를 파악하기 힘들었는데 문제를 풀다보니 얘들을 제일 많이 쓰고 있어서 좀 웃겼다.😂😂 알고리즘 문제 마라톤 부분까지 해내고 나면 JS문법 종합반 4주차를 목표로 달려야겠다.