[JAVA] 프로그래머스-두 정수 사이의 합 12912

Sommi·2024년 3월 26일
0

Algorithm

목록 보기
5/5

- 문제를 보자마자

'정수'를 '소수'로 착각한 나자신.
쉬운 문제를 어렵게 꼬아서 풀려했던 나자신.

1과 자기자신만 약수로 가지는 소수로 착각해서 이걸 재귀함수를 써야하나... 루트를 써야하나... 생각이 많았다.

하지만 정수는?
자연수(양의 정수)와 0과 자연수에 -를 붙인 음의 정수를 포함한 모든 값을 말한다.

따라서, 그저 주어진 a와 b 범위 사이의 정수값을 더하면 되는 문제이다.

그런데, a와 b도 오름차순으로 주어진 게 아니다. 그래서 둘 중에 누가 큰지를 따져야한다.

- 처음 코드는

class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        if(a==b){
            return a;    
        }
        
        int min = Math.min(a,b);
        int max = Math.max(a,b);
        
        for(; min<=max; min++){
            answer += min;
        }
        return answer;
    }
}

if문으로 a와 b가 같은 지 우선 확인 후 같다면 a 반환,
아니라면 최대최소를 따져 for문을 돌리도록 짰다.

하지만 생각해보니 최대최소를 따지고 for문을 돌린다면, 같은 값일 때는 어차피 answer에 하나의 값만 더해지기 때문에 굳이 if가 있을 필요가 없었다.

- 수정한 코드

class Solution {
    public long solution(int a, int b) {
        long answer = 0;

        int min = Math.min(a,b);
        int max = Math.max(a,b);
        
        for(; min<=max; min++){
            answer += min;
        }
        return answer;
    }
}

한결 짧아졌다.

- 다른 사람의 풀이 참고

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;
    }
}

등차수열의 합 공식을 이용한 방식

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;
  }
}

for문 안에 삼항을 쓰는 방식

profile
넌 할 수 있어 라고 말해 주세요~

0개의 댓글

관련 채용 정보