[2024.07.24 TIL] 두 정수 사이의 합

박지영·2024년 7월 24일
0

Today I Learned

목록 보기
9/84

오늘은 한 문제에 꽂혀서 이 문제만 주구장창 파보았다.

두 정수 사이의 합

문제 설명

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

제한 조건

a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

function solution(a, b) {
    
    let answer = 0;
    
    if (a > b) {
        
        for (let i = b; i <= a; i++) {
            answer = answer + i;
        }
    } else if (a < b) {
        
        for (let i = a; i <= b; i++) {
            answer = answer + i;
        }
    }
    return a === b ? a : answer;
}

첫풀이다. for문을 2개나 쓰는게 참 마음에 안든다.

그래서 1개로 가능한지 고민해봤다

function solution(a, b) {

    let answer = 0;
    
    if (a > b) {
        let c = a;
        a = b;
        b = c;
    }
    
    for (let i = a; i <= b; i++) {
        answer+=i;
    }
    
    return a === b ? a : answer;
}

for문에 i <= b; 부분을 성립 되게 만드는데 시간이 좀 걸렸다.

뭔가 for없이도 될 것 같긴 한데

잘 생각해보니 1씩 계속 증가하는 게 등차수열인 걸 생각해냈다.

가우스 덧셈으로 해결해봤다.

function solution(a, b) {

    let answer = 0;
    
    if (a < b) {
        answer = (a + b) * (b - a + 1)/2;
    } else {
        answer = (a + b) * (a - b + 1)/2;
    }
    
    return a === b ? a : answer;
}

같은 식을 2개나 사용하는 건 정말이지 구린 코드같다.

function solution(a, b) {

    let answer = ( a + b ) * (Math.abs( a - b ) + 1)/2;
    
    return a === b ? a : answer;
}

그래서 절댓값을 구하는 Math.abs() 함수를 사용해서 a와 b의 크기랑 상관없이 구할 수 있게 했다.

뭔가 많았던 코드가 결국 2줄로 짧아져버렸다.

별 것 아닌 코드지만 내 혼자 힘으로 최적화 해보는 시도는 처음이라 재밌었다.

profile
신입 개발자

0개의 댓글