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

2025. 7. 10. 10:22·CODING TEST/programmers

📌 문제 정보

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

- 문제 링크: 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) 문자열 이어붙인 뒤 정수 변환

'CODING TEST > programmers' 카테고리의 다른 글

Day3 - 문자열 곱하기  (0) 2025.07.10
Day3 - 문자 리스트를 문자열로 변환하기  (0) 2025.07.10
Day3 - 문자열 섞기  (0) 2025.07.10
Day2 - 문자열 겹쳐쓰기  (0) 2025.07.09
Day2 - 문자열 돌리기  (0) 2025.07.09
'CODING TEST/programmers' 카테고리의 다른 글
  • Day3 - 문자열 곱하기
  • Day3 - 문자 리스트를 문자열로 변환하기
  • Day3 - 문자열 섞기
  • Day2 - 문자열 겹쳐쓰기
iamyuunzo
iamyuunzo
https://github.com/iamyuunzo
  • iamyuunzo
    iamyuunzo
    iamyuunzo
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Study (5)
        • App Developer (0)
        • Algorithm study (0)
        • Google AI Essentials (3)
      • Project (3)
        • 감행 (3)
        • Tokkit (0)
        • 다시, 봄 (0)
        • Clone Coding (0)
      • 자격증 모음 (5)
        • AWS Certification (1)
        • 정보처리기사 (0)
        • 빅데이터분석기사 (1)
        • TOEIC Speaking (3)
      • CODING TEST (79)
        • baekjoon (26)
        • programmers (20)
        • MySQL (31)
        • COS Pro (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    SQL
    프로그래머스
    java
    토익 스피킹
    백준
    회고
    우리fis아카데미
    CLF-C02
    AWS Certification
    회고록
    프로젝트 리팩토링
    COS Pro
    우리fisa
    Programmers
    감행
    baekjoon
    우리 fisa
    클라우드서비스개발
    toeic speaking
    AWS Certified Cloud Practitioner
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
iamyuunzo
Day3 - 두 수의 연산값 비교하기
상단으로

티스토리툴바