CODING TEST/programmers

Day3 - 두 수의 연산값 비교하기

iamyuunzo 2025. 7. 10. 10:22

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 두 수의 연산값 비교하기

- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181938

 

 

📌 문제 요약

핵심 조건: 양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 * a * b 중 더 큰 값을 return 단, a ⊕ b와 2 * a * b가 같으면 a ⊕ b를 return (연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환)

- 제한: 1 ≤ a, b < 10,000

 

 

📌 내 풀이 및 코드

class Solution {
    public int solution(int a, int b) {      
        int x = Integer.parseInt(String.valueOf(a) + String.valueOf(b));
        int y = 2 * a * b;

        if (x >= y) {
            return x;
        } else {
            return y;
        }
    }
}

- 정수 2개를 문자열로 변환해서 최종적으로 문자열을 만드는 문법에 대해 몰라서 힌트 봄.

- String.valueof()를 써야했는데 x를 int로 받아야해서 문법이 더 필요했음. (incompatible types)

- parseInt() 써야했음. (문자열로 이어붙인 뒤, 그걸 다시 정수로 변환해야 함.)

 

 

📌 다른 사람들 풀이

// 1
return Math.max(Integer.parseInt(String.valueOf(a)+String.valueOf(b)),2*a*b);


// 2
int ab = Integer.parseInt(a + "" + b);
if(2 * a * b <= ab) {
    return ab;
} else {
    return 2 * a * b;
}
    
    
// 3
return Math.max(
    (int)Math.pow(10, (int)Math.log10(b) + 1) * a + b,
    2 * a * b
);


// 4
int t1 = Integer.parseInt("" + a + b);
int t2 = 2 * a * b;

if (t1 >= t2) {
    return t1;
} else {
    return t2;
}

<-- 다른 풀이 요약 -->

- 1 : Math.max + parseInt - but 값이 같을 때 Math.max는 둘 중 아무거나 반환하니 a를 반환한다는 보장이 없음. (불합 가능성)

- 2 : 내 코드에서 int x = Integer.parseInt(a + "" + b); 로 바꾼 코드. (깔끔함)

- 3 : parseInt 대신 수학으로 이어붙임 → a * 10^(자릿수(b)) + b (Math.max라 같을 때 ⊕ 보장 못함 → 조건 불일치)
     => Math.pow, Math.log10 → 부동소수점 연산, 캐스팅 필요 → 오히려 복잡 + 정수 오차 위험 있음

- 4 : String.valueof 대신 "" + a + b를 씀. 내 코드에서 ""로 문자열 변환한 것뿐임.

버전  조건 준수  복잡도  간결성  추천도
Math.max ❌ (같을 때 ⊕ 조건 위반) 가장 간단 한 줄
if + parseInt (<=) 간단 문제 조건에 딱 맞음 ✅✅✅
Math.pow ❌ (같을 때 ⊕ 조건 위반) 불필요하게 복잡 부동소수점 위험
if + "" + a + b 간단 String.valueOf 대신 "" ✅✅

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

문법  의미  실전 예시
a + "" + b 정수를 문자열로 이어붙이기 12 + "" + 3 → "123"
String.valueOf(x) 정수를 문자열로 변환 String.valueOf(12) → "12"
Integer.parseInt(str) 문자열을 정수로 변환 Integer.parseInt("123") → 123

 

** Integer.parseInt() **

- Integer: 자바의 기본형 int를 다루는 클래스 / parseInt : 문자열(String)을 정수(int)로 바꿔주는 메서드

- String을 int로 바꿔주는 대표적인 표준 도구

메서드  설명
Integer.parseInt(String s) 기본 10진수 문자열을 정수로
Integer.parseInt(String s, int radix) 진법 지정 가능!
Integer.valueOf(String s) parseInt랑 비슷한데, Integer 객체를 반환

- 자주하는 실수 : 문자열이 숫자가 아니면 에러. (Integer.parseInt("abc"); 이런 형식이면 안됨)

 

 

사용 예 결과  의미
Integer.parseInt("456") 456 (int) 문자열 "456" → 정수 456
Integer.parseInt("007") 7 (int) 앞에 0 붙어도 숫자로 인식
Integer.parseInt("12" + "3") 123 (int) 문자열 이어붙인 뒤 정수 변환