프로그래머스 코딩테스트 연습
[프로그래머스 코테 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 문을 돌림