[프로그래머스] 두 정수 사이의 합

김유원·2024년 1월 16일
0

📝24.01.16

🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12912

문제 설명

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

[C#, C++] 내가 작성한 풀이

1차원적인 풀이다. 단순하게 a부터 b까지 더한다.를 실행하기 위해 a가 b보다 큰 경우를 없앤 풀이이다.

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

[C#] 남이 작성한 풀이

1) while문을 활용한 풀이
보고 3초정도 이게 무슨 뜻이지? 생각했던 풀이다. while문을 통해 a가 b보다 크면 b를 향해 점점 a가 작아지는 방향으로, a가 b보다 작으면 b를 향해 점점 커지는 방향으로 더하는 알고리즘이다.

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;
    }
}

2) 등차수열의 합

등차수열의 합 공식을 활용하는 방법도 있다는 생각을 못했다.

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;
    }
}

[C++] 남이 작성한 풀이

비트 연산자를 활용한 풀이다...비트연산자 자료를 보며 간신히 무슨 의미인지 파악했다. 다시 이 문제가 주어진다고 해도 이렇게 풀 자신이 없다...

#include <string>
#include <vector>

using namespace std;

long long solution(int a, int b) {
    long long answer = 0;
    if (a > b) a ^= b ^= a ^= b;
    answer = (long long)b * -~b / 2 - (long long)a * ~-a / 2;
    return answer;
}
profile
개발 공부 블로그

0개의 댓글

관련 채용 정보