풀이 1) 반복문을 활용한 두 수 사이의 합 구하기
약간 주의해야 할 점은 반환형이 long이기 때문에 결과를 담을 변수를 long 타입으로 해줘야 한다.
(이것 때문에 4 ~ 10 테스트 케이스에서 실패 떠서 당황함...)
using System;
public class Solution {
public long solution(int a, int b) {
if(a > b)
{
int temp = a;
a = b;
b = temp;
}
long sum = 0;
for(int i = a; i <= b; i++)
sum += i;
return sum;
}
}
풀이 2)
문제를 해결하고 위의 문제를 반복문 없이 해결할 수 있을 것 같다는 생각이 들었다.
그래서, 인터넷에 찾아보니 고등학교 때 배운 등차수열의 합 공식이 존재했다.
위의 공식을 적용시키기 위해서는 C#의 Math Class를 활용해야 좋기 때문에
Math Class의 Import 방식을 찾아보니
using static System.Math;
로 Import 받아야 한다는 사실을 알게 됐다...
static을 붙여야 하는 이유는 Math Class를 static Class 형식으로 만들었기 때문으로 보이고,
static Class로 만든 이유는 Math Class를 개발자들이 많이 사용하기 때문에 new 연산자로 생성자를 호출해
인스턴스를 만드는 방식이 아닌 static Class로 바로 사용하기 좋게 만들고 싶어서라는 생각이 든다.
using System;
using static System.Math;
public class Solution {
public long solution(int a, int b)
{
return (long)(Math.Abs(b - a) + 1) * (a + b) / 2;
}
}
위의 공식을 Math Class로 구현하고 결과를 확인해보면
위와 같이 풀이 1) 보다 적은 수행시간으로 계산 결과를 얻을 수 있다는 걸 볼 수 있다.
이유로는 풀이 1)은 수행시간이 반복문을 사용해 O(N)이지만
풀이 2)는 반복문을 사용하지 않아 O(1)로 동작하기 때문이다.
'문제 풀기 > C#' 카테고리의 다른 글
24. 서울에서 김서방 찾기(Array.IndexOf(), Array.FindIndex() 함수) (0) | 2025.01.15 |
---|---|
23. 콜라츠 추측 (1) | 2025.01.15 |
21. 하샤드 (ToCharArray()(문자열 문자로 나누기)) (0) | 2025.01.14 |
20. 정수 내림차순으로 배치하기(정렬 함수) (0) | 2025.01.14 |
19. 정수 제곱근 판별 (0) | 2025.01.14 |