[ 프로그래머스 Lv.0 | Java ] 두 수의 연산값 비교하기 📌

dokim·2023년 8월 28일
1
post-thumbnail

🏷️두 수의 연산값 비교하기


1. 해결 전략

  • 먼저 정수 String.valueOf()를 사용하여 ab를 문자열로 형변환을 하여 a+b 연산하고, Integer.parseInt()를 사용하여 다시 정수로 저장합니다.
  • 저장된 정수 a+b2 * a * b을 비교하여 더 큰 값을 반환합니다.

2. 구현코드

✅ Integer.parseInt()

✅ String.valueOf()

class Solution {
    public int solution(int a, int b) {
        int plusCase = Integer.valueOf((String.valueOf(a) + String.valueOf(b)));
        int multiplyCase = 2 * a * b;
        return plusCase > multiplyCase ? plusCase : multiplyCase;
    }
}

3. 시간 & 공간 복잡도

  • 시간 복잡도: O(1)
  • 공간 복잡도: O(1)

4. Refatoring

✅ Math.max()

✅ Integer.parseInt("" + a)

class Solution {
    public int solution(int a, int b) {
        return Math.max((Integer.valueOf("" + a + b)), (2 * a * b));
    }
}
  • 이전 글에서 사용한 코드를 활용하여 Refactoring 하였습니다.
    이전에는 String.valueOf(a)를 사용하여 문자열로 형변환을 하였는데 메소드 사용없이 위와 같이 사용하면 자동 형변환이 되고 가독성을 높일 수 있는 것 같습니다.
  • 이전 코드에서는 삼항연산자를 사용하여 비교를 하였지만 Math.max()를 사용하여 간결하게 코드를 작성할 수 있었습니다.

✅ Integer.parseInt() vs Integer.valueOf()

  • Integer.parseInt() : int 타입으로 반환
  • Integer.valueOf() : int형의 boxing한 Integer 타입으로 반환
  • 둘 다 문자열을 정수로 변환하는 Java 메서드로 주요 차이점은 반환되는 값의 형태입니다.
  • Integer.parseInt() : int 타입으로 반환, Integer.valueOf() : int형의 boxing한 Integer 타입으로 반환 합니다.
  • 하지만 int num = Integer.parseInt("123"); 이렇게 코드를 작성하여도 문제 없이 잘 동작합니다.
    -> Java 5부터는 자동으로 언박싱(auto-unboxing)이 가능하여 Integer 객체를 int 변수에 할당하더라도 자동으로 언박싱되어 정수 값이 저장됩니다.
    -> 수동으로 언박싱 :
    Integer numObject = Integer.valueOf("123");
    int num = numObject.intValue();
  • 결론 : int형으로 변환하는 것이라면 Integer.parseInt() 사용하여 불필요한 작업을 줄이는이 좋습니다.

5. 후기 및 반성

  • 이전 글과 비슷한 문제이므로 이전 문제의 코드를 연습하며 다시 사용해봤습니다. 역시 코드가 간결하고 가독성도 좋아 만족하는 코드입니다.
  • 문제를 풀다보니 Integer.parseInt(), Integer.valueOf()이 두 메소드에 대해 궁금하여 찾았고 오늘도 배움을 얻어 좋았습니다.
  • 항상 코드를 사용할 때는 조금이라도 더 정확한 기능과 목적을 생각하며 작성하도록 생각하는 것이 중요하다고 느꼈습니다.

6. 참고

0개의 댓글