1. 해결 전략
- 먼저 정수
String.valueOf()
를 사용하여 a
와 b
를 문자열로 형변환을 하여 a+b
연산하고, Integer.parseInt()
를 사용하여 다시 정수로 저장합니다.
- 저장된 정수
a+b
와 2 * 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. 참고