두 정수 사이의 합_Java

컴투루·2022년 6월 28일
0

프로그래머스 Lv.1

목록 보기
20/38

연습문제

🔥 두 정수 사이의 합 🔥


👀 문제

두 정수 a,b가 주어졌을 때 a와 b사이에 속한 모든 정수의 합을 리턴하는 함수 solution을 완성해보자


✔️ 조건

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

👩‍💻 입력 & 🧙 출력

abreturn
3512
333
5312

🙋‍♀️ 풀이

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

너무 간단해서 다른 풀이가 있을까 싶었는데 와 너무 다양한 풀이들이...


💬 다른 풀이

  1. 등차수열
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;
    }
}
  1. 매개변수를 통해 받는 a와 b를 Math의 min과 max를 통해서 sumAtoB의 매개변수로 넣어준다
  2. sumAtoB는 등차수열을 이용한 함수이다.
    등차수열의 합 공식 : n * ( 첫째항 + 마지막항) /2
    여기서의 n은 증가 폭이니까
    따라서 ( b - a + 1 ) * (a + b) /2의 값을 return해주게 된다.

등차수열은 전혀 생각하지 못한 방식이다.
어떻게 이런생각을 하는 거지

메모리: 71.9 MB, 시간: 0.07 ms

  1. Math
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

  1. 삼항연산자
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를 사용하면 느려지는 것 같다.


👏 마무리

다른 분들의 풀이를 볼수록 놀랍고 내 코드는 작아진다..

profile
맘 먹으면 못할 게 없지

0개의 댓글