프로그래머스 코딩테스트 연습

[프로그래머스 코테 C#] Lv1. 두 정수 사이의 합

노재두내 2024. 4. 29. 10:07

<문제>

두 정수 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의 대소관계는 정해져있지 않습니다.
입출력 예
a                                                         b                                                        return
3 5 12
3 3 3
5 3 12

<나의풀이>

문제를 보자마자 for문으로 풀면 되겠다고 생각. (i는 a에서 b까지 해서 더하기)

하지만 제한 조건에서 a와 b의 대소관계가 없다고 했으니

 

a-b>0 면, a가 b보다 큰 값이므로 for문을 b부터 시작해서 a까지 증가하면서 더하고

a-b<0 면, b가 a보다 큰 값이므로 a부터 시작해서 b까지 수를 더한다.

 

이런식으로 생각해서 코드를 아래처럼 작성하였다.

public class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        if(a-b>0)
        {
            for(int i=b;i<=a;i++)
            {
                answer+=i;
            }
        }
        else
        {
            for(int i=a;i<=b;i++)
            {
                answer+=i;
            }
        }
        
        return answer;
    }
}

정답 ~.~

 

근데 훨씬 간단한 방법이 있을거같아서 다른 사람들의 풀이가 궁금하다


<다른 사람 풀이>

public class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        while (a != b)
        {
            answer += a;
            a = (a > b) ? a - 1 : a + 1;
        }

        return answer + b;
    }
}

삼항 연산자로 a가 b보다 크면 while문 안에서 a 값을 하나씩 감소, b랑 똑같아지면 while문 종료하고

answer에 b 값 더해줌

 

using System;
public class Solution {
    public long solution(int a, int b) {
       long answer = 0;

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

1+2+3=6     

(Math.Abs(a - b) + 1) * (a + b)) / 2   =>두 수 사이의 합이 나오는 공식?인거같음

3*4/2=6

 

public class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        (var minValue, var maxValue) = a > b ? (b, a) : (a, b);

        for (int num = minValue; num <= maxValue; num++)
            answer += num;

        return answer;
    }
}

삼항 연산자이용해서 가장 작은 값과 가장 큰 값을 설정해주고, 이걸 토대로 for 문을 돌림

댓글수0