연습문제
🔥 두 정수 사이의 합 🔥
두 정수 a,b가 주어졌을 때 a와 b사이에 속한 모든 정수의 합을 리턴하는 함수 solution을 완성해보자
a | b | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
class Solution {
public long solution(int a, int b) {
long answer = 0;
if(a>b){
for(;b<=a;b++){
answer+=b;
}
}else{
for(;a<=b;a++){
answer +=a;
}
}
return answer;
}
}
그냥 완전 간단하게 생각해서 풀었다.
메모리: 77.6 MB, 시간: 0.08 ms
너무 간단해서 다른 풀이가 있을까 싶었는데 와 너무 다양한 풀이들이...
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a, b), Math.max(b, a));
}
private long sumAtoB(long a, long b) {
return (b - a + 1) * (a + b) / 2;
}
}
등차수열은 전혀 생각하지 못한 방식이다.
어떻게 이런생각을 하는 거지
메모리: 71.9 MB, 시간: 0.07 ms
class Solution {
public long solution(int a, int b) {
long answer = 0;
if(a!=b){
for(int i=Math.min(a,b);i<=Math.max(a,b);i++){
answer+=i;
}
}else{
answer=a;
}
return answer;
}
}
나는 단순하게 if문으로 a와 b의 크기를 비교해서 반복문을 돌렸는데
이 코드는 단순히 두 수가 같은지를 비교하고 같지않다면
Math의 min과 max를 통해서 for문을 돌렸다.
메모리: 75.7 MB, 시간: 0.14 ms
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++)
answer += i;
return answer;
}
}
Math의 min과 max를 사용하지 않고 삼항연산자로 두 수를 비교해서 하는 방법도 있다니
메모리: 78.6 MB, 시간: 0.10 ms
실행시간을 비교해보면 등차수열을 이용한 풀이가 가장 적은 시간이 들었고 그 다음이 내코드...? ㅎㅎㅎ
왜인지는 모르겠지만 Math를 사용하면 느려지는 것 같다.
다른 분들의 풀이를 볼수록 놀랍고 내 코드는 작아진다..