프로그래머스/코딩문제

[프로그래머스] Lv.0 더 크게 합치기

쟌문 2023. 10. 11. 13:18
반응형

문제 바로가기

🔖 문제 설명 

연산 ⊕는 두 정수에 대한 연산으로 두 정수를 붙여서 쓴 값을 반환합니다. 예를 들면 다음과 같습니다.

 

  • 12 ⊕ 3 = 123
  • 3 ⊕ 12 = 312

양의 정수 ab가 주어졌을 때, abba 중 더 큰 값을 return 하는 solution 함수를 완성해 주세요.

단, abba가 같다면 ab를 return 합니다.

 

 


⛔ 제한사항

  • 1 ≤ ab < 10,000

 


📋 입출력 예

a b result
9 91 991
89 8 898

 

 


🔖 입출력 예 설명 

입출력 예 #1

 

  • a ⊕ b = 991 이고, b ⊕ a = 919 입니다. 둘 중 더 큰 값은 991 이므로 991을 return 합니다. 

입출력 예 #2

 

  • a ⊕ b = 898 이고, b ⊕ a = 889 입니다. 둘 중 더 큰 값은 898 이므로 898을 return 합니다.

 

 


🧾 기본 제공 코드

function solution(a, b) {
    var answer = 0;
    return answer;
}

 

 


🗳️ (직접 작성한) 풀이 코드

function solution(a, b) {
    const sum = (a, b) => Number(String(a) + String(b));
    
    if (sum(a, b) > sum(b, a)) {
        return sum(a, b);
    } else if (sum(a, b) < sum(b, a)) {
        return sum(b, a);
    } else {
        return sum(a, b);
    }
}
 

위와 같이 문제를 풀이했다.

문자열과 숫자 타입의 특성을 이해하고 있다면 쉽게 풀 수 있는 문제였다.

어렵지 않았고 단순한 유형의 문제였다.

 

다만 풀이 이후 드는 2가지 생각이 있었다.

 

1. 가독성이 떨어진다.

 

  • 조건문 비교를 위해 사용된 sum 함수에 전달된 ab의 구분이 육안으로 봤을 때 혼란스럽게 보일 수 있었다.

2. 리팩토링을 통해 코드를 더욱 쉽게 풀어낼 수 있지 않을까?

 

하는 2가지 생각이 들었다.

 

그래서 다른 사람들의 문제풀이를 찾아보기 이전에

ChatGPT에게 물어보고 싶은 생각이 들었다.

그래서 물어봤다.

 

🗳️ (ChatGPT가 알려준 리팩토링된) 풀이 코드

function solution(a, b) {
    const sumA = Number(`${a}${b}`);
    const sumB = Number(`${b}${a}`);

    return Math.max(sumA, sumB);
}

리팩토링을 통해 훨씬 가독성이 좋아졌다.

뿐만 아니라 구분을 위한 각 변수 선언으로 인해 비교 대상이 분명해졌다.

더군다나 해당 문제의 풀이를 위해 내장 함수를 사용해야겠다는 생각을 못하고 있었는데,

ChatGPT 덕분에 표준 내장 객체인 Math 개체의 정적 메서드인 .max()를 사용하면

보다 더 효율적인 문제 해결이 가능하다는 것을 알 수 있었다.

.max() 메서드를 사용하면 두 값 중 큰 값을 반환한다.

이렇게 리팩토링된 덕분에 가독성이 높아지고 코드가 간결해졌다.

Gooooooooooooood.

 

 


📎 참고

- ChatGPT

 

 


🔸 작성된 본문 내용 중 미흡한 부분이 있을 수 있습니다.
🔸 고칠 부분이나 추가되면 좋을 내용 댓글로 남겨주시면 완성도 높은 글을 만들어가는 데에 큰 힘이 됩니다. ☺️

 

반응형