발자취

[프로그래머스 Lv.1 / C언어] Day24. 두 정수 사이의 합 본문

코딩테스트/Daily Coding (C, C++)

[프로그래머스 Lv.1 / C언어] Day24. 두 정수 사이의 합

해린 2024. 6. 27. 00:53

2024. 06. 27 - 코딩테스트 스터디 Day24

 
 

01. 문제 설명

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

02. 제한사항

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

 

 

03. 입출력 예

a b return
3 5 12
3 3 3
5 3 12

 


 
 

04-1. 풀이 및 답 - 첫 번째 코드

두 가지 아이디어가 생각나서 두 방식으로 풀어보았다.

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

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

위 코드는 a와 b의 크기를 비교하여 a가 큰 경우 b에서 a까지의 수를 더하고,

b가 큰 경우 a에서 b까지의 수를 더하도록 하는 코드이다.

 

 

04-2. 풀이 및 답 - 두 번째 코드

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

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

두 번째 코드는 a와 b의 크기를 비교하여 a가 더 크면 a값과 b값을 바꿔주고, a에서 b까지의 수를 더하는 코드이다.

 

 

💎 효율성 비교 💎

우선 두 코드 모두 시간 복잡도 측면에서 동일한 O(n) 복잡도를 가진다. (n은 a와 b사이의 거리)

그러나 두 번째 코드가 a와 b의 대소 관계에 상관없이 하나의 'for' 루프만 사용하기 때문에 코드가 더 간결하고,
그렇기에 코드의 가독성과 유지보수 측면에서 더 좋은 코드라고 말할 수 있다.

 

정답~