발자취
[프로그래머스 Lv.1 / C언어] Day24. 두 정수 사이의 합 본문
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' 루프만 사용하기 때문에 코드가 더 간결하고,
그렇기에 코드의 가독성과 유지보수 측면에서 더 좋은 코드라고 말할 수 있다.

정답~

끗
'코딩테스트 > Daily Coding (C, C++)' 카테고리의 다른 글
| [백준 / C언어] Day26. 나머지 (10430) (0) | 2024.06.28 |
|---|---|
| [프로그래머스 Lv.1 / C++] Day25. 서울에서 김서방 찾기 (0) | 2024.06.28 |
| [프로그래머스 Lv.1 / C언어] Day23. 나머지가 1이 되는 수 찾기 (0) | 2024.06.26 |
| [프로그래머스 Lv.1 / C++] Day22. x만큼 간격이 있는 n개의 숫자 (0) | 2024.06.25 |
| [백준 / C언어] Day21. queuestack (24511) (0) | 2024.06.07 |