crystal_dev
Crystal 개발 일지
crystal_dev
전체 방문자
오늘
어제
  • 분류 전체보기 (58)
    • Web (0)
    • Frontend (32)
      • React (0)
      • Javascript (17)
      • HTML & CSS (14)
      • DOM API (0)
    • 사이드프로젝트 (1)
      • Flask (1)
    • CS (0)
      • Network (0)
    • 형상관리 & 개발도구 (2)
      • git (1)
      • VSCode (1)
    • 알고리즘 (19)
      • 백준 알고리즘 (1)
      • 프로그래머스 (17)
      • 기타 (1)
    • Error (2)
      • javscript (1)
      • python (1)
    • blog (2)
      • daily (1)
      • 회고 (0)
      • it참고 (0)
      • 항해99 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • userfont
  • css정렬
  • Programmers
  • CSS
  • Algorithm
  • 프로그래머스
  • js
  • 자바스크립트
  • 풀이
  • match()
  • javascript error
  • js기본
  • 알고리즘
  • 느슨한타입
  • Javascript
  • let
  • js 기본
  • 프론트엔드
  • css위치
  • frontend

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
crystal_dev

Crystal 개발 일지

[lv.1] 음양 더하기
알고리즘/프로그래머스

[lv.1] 음양 더하기

2022. 5. 16. 14:54
728x90
반응형

 

문제 설명

 

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


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

입출력 예absolutessignsresult
[4,7,12] [true,false,true] 9
[1,2,3] [false,false,true] 0

입출력 예 설명

입출력 예 #1

  • signs가 [true,false,true] 이므로, 실제 수들의 값은 각각 4, -7, 12입니다.
  • 따라서 세 수의 합인 9를 return 해야 합니다.

입출력 예 #2

  • signs가 [false,false,true] 이므로, 실제 수들의 값은 각각 -1, -2, 3입니다.
  • 따라서 세 수의 합인 0을 return 해야 합니다.

 

내 풀이1

function solution(absolutes, signs) {
    var answer = 0;
    while(absolutes.length > 0){
        if(!signs.shift()) answer += "-";
        else answer += "+";
        answer += absolutes.shift();
    }
    return eval(answer);
}
💡 풀이
모든 문자열을 합쳐서 eval()로 수식계산해서 값 구하기
 eval() : 문자열을 수식으로 바꾼다.

✔ 정리
1. numbers.pop()한 수를 answer에 더한다.
2. signs.pop()한 부호를 answer에 더한다.
3. numbers.length가 0이 될 때 까지 1,2과정 반복
4. eval(answer) 를 리턴

⭐ 주의할 점

eval은 해킹 위험이 있으므로 크롬에서 권장하지 않는 메서드이다.

const str = 'ler'
eval('a' + str + 't("eval은 위험해요")');

위와 같이 코드를 입력하면 아래와 같이 alert 코드가 실행 되어 버린다.

👉 문자열을 넣었는데 코드가 실행 되어버리기 때문에 해킹 위험이 있다. 

 

내 풀이2

function solution2(absolutes, signs){
    var answer = 0;
    for(let i=0; i<absolutes.length; i++){
        if(signs[i]) answer += absolutes[i];
        else answer -= absolutes[i];
    }
    return answer;
}

 

다른 사람 풀이1

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

👉 reduce 메서드를 활용한 풀이다. 

 

다른 사람 풀이2

function solution(absolutes, signs) {
    let answer = 0;
    absolutes.forEach((v, i) => {
        if (signs[i]) {
            answer += v;
        } else {
            answer -= v;
        }
    })
    return answer;
}

👉 forEach 메서드를 활용한 풀이.

 

👀 참고

메서드 MDN 또는 참고 링크
reduce https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
https://miiingo.tistory.com/365
forEach https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach 
https://goddino.tistory.com/132
728x90
반응형
저작자표시 (새창열림)

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[lv.1] 핸드폰 번호 가리기  (0) 2022.05.17
[lv.1] 평균 구하기  (0) 2022.05.16
[lv.1] 없는 숫자 더하기  (0) 2022.05.14
[lv.1] 두 정수 사이의 합  (0) 2022.05.14
[lv.1] 문자열을 정수로 바꾸기  (0) 2022.05.13
    '알고리즘/프로그래머스' 카테고리의 다른 글
    • [lv.1] 핸드폰 번호 가리기
    • [lv.1] 평균 구하기
    • [lv.1] 없는 숫자 더하기
    • [lv.1] 두 정수 사이의 합
    crystal_dev
    crystal_dev
    어제보다 더 나은 오늘의 내가 되자 ✧ʕ̢̣̣̣̣̩̩̩̩·͡˔·ོɁ̡̣̣̣̣̩̩̩̩✧

    티스토리툴바