본문 바로가기
개발 공부/알고리즘 개념+문제풀이

[알고리즘] 음양 구하기_프로그래머스 1단계

by 크롱이크 2021. 6. 21.

문제설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 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< absolutes.length; i++){
        if(signs[i]=== false ){
            absolutes[i]= -absolutes[i]
        }
        answer += absolutes[i]
    }
    return answer;
  }

인기많고 간단한 코드↓

function solution(absolutes, signs) {

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

해석

signs와 absolutes의 같은 인덱스에 따라 +,- 가 붙기 때문에 for문을 돌려 간단하게 풀수 있었다.

 

한줄평

이 문제는 for문을 돌리면 풀수있다고 생각해서 reduce를 사용해서 한줄로 만들어보고싶었다. 하지만 만들지 못하였고, 다른 분의 레퍼런스를 보니 이해가 되었다. 메소드 사용은 언제쯤 익숙해질런지..ㅠㅠ

filter, map, reduce, forEach, indexOf, includes 잘 사용해보자 

 

링크

https://programmers.co.kr/learn/courses/30/lessons/76501

 

 

 

프로그래머스 1단계 문제 풀이 현황

1번째- 키패트 누르기-어려움
2번째- 내적● 
3번째- 폰켓몬-헷갈림
4번째- k번째수
5번째- 체육복
6번째- 음양구하기● 
7번째- 완주하지 못한 선수
8번째- 로또의 최고 순위와 최저 순위 -다시 풀어봐야함

17번째- 두개 뽑아서 더하기

48번째- x만큼 간격이 있는 n개의 숫자

 

반응형

댓글