본문 바로가기

코딩테스트

[프로그래머스] level1. 두 정수 사이의 합 (javascript)

반응형

문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

의식의 흐름

그냥 단순 for 문 돌리는것 같아서 일단 짜봄

 

초기코드(정답)

function solution(a, b) {
    var answer = 0;
    for (let i = 0 ; i <= Math.abs(a-b); i++ ){
        if(a > b){
            answer = answer + (b+i)
        } else if (b > a){
            answer = answer + (a+i)
        } else {
            answer = a
        }
    }
    return answer;
}

다른 사람 정답

방법1.

function adder(a, b){
    var result = 0
    //함수를 완성하세요

    return (a+b)*(Math.abs(b-a)+1)/2;
}

평균합 = 양 끝의 합/2 * 양 끝의 합의 개수 (평균x갯수)
이런 수식들은 외워두고 써먹어보자.

평균합 참조 사이트 : 블로그

 

방법2.

function adder(a, b, s = 0){
  for (var i = Math.min(a, b); i <= Math.max(a, b); i++) s += i;
  return s;
}

if else문 돌린 것보다 최소값 최대값 이용한게 더 좋아보인다.

참고 자료

배열일 경우 어떤 함수를 쓰는게 효율적인가 찾아보았다. // 참조 : 블로그

아래 함수들은 모두 각 배열의 요소마다 정해진 조건으로 실행을 하는 것이다.

모두 사본이 반환하여 원래 배열은 바뀌지 않는다.

- map: 새로운 함수를 만들고, 거기에 조건에 맞는 값들을 채워넣을때
- reduce : 누적 결과물을 쌓고, 최종적으로 하나의 값으로 만들고 싶을때
- forEach : loop랑 같다고 보면 됨
- filter : 조건에 걸려진 요소들만 새로운 배열에 추가됨

반응형