231130 TIL

chillakilla·2023년 12월 1일

두 수의 연산값 비교하기

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

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

    양의 정수 a와 b가 주어졌을 때, a ⊕ b와 2 a b 중 더 큰 값을 return하는 solution 함수를 완성해 주세요.
    단, a ⊕ b와 2 a b가 같으면 a ⊕ b를 return 합니다.

입출력 예

솔루션 코드

<script>
function solution(a, b) {
  let sum = String(a) + String(b);
  let multiply = a * b * 2;

  if (parseInt(sum, 10) > multiply) {
    return parseInt(sum, 10);
  } else {
    return multiply;
  }
}
</script>
  • 먼저 연산 ⊕ 에 대한 계산은 문자열로 바꿔서 진행해줘야 한다.
  • 그러니 sum 이라는 변수에 문자열로 변환한 a, b의 덧셈을 수행해준다.
  • 다음으로는 a x b x 2 의 계산을 진행해 변수 multiply에 할당해준다.
  • sum 과 multiply 를 비교하여 더 큰 값을 반환할 차례다.
  • 문자열이었던 sum 을 parseInt 를 사용하여 숫자로 변환해준다.
  • 만약 multiply 보다 숫자로 변환한 sum 이 크다면 sum 을 반환.
  • 그렇지 않다면 multiply를 반환 시켜준다.

1점짜리 정답이긴 하지만 별다른 힌트나 도움 없이 풀었다는 점에서 나름 뿌듯하다.


다른 사람의 풀이

<script>
function solution(a, b) {
    let num1 = parseInt(a+""+b+"");
    let num2 = 2*a*b;
    return num1 > num2 ? num1 : num2;
}
</script>
  • 풀이 방식은 비슷하다.
  • 하지만 문자열로 더해서 숫자로 변환하는 걸 한 줄로 구현해주셨으며,
  • if 문을 삼항 연산자로 활용하셔서 더욱 깔끔한 코드가 나온 것 같다.
<script>
function solution(a, b) {
    return Math.max( +(a.toString()+b.toString()),2*a*b)
}
</script>
  • Math.max를 이용하셔서 그 안에다가 식을 죄다 담아주셨다.
  • 이러면 if 나 삼항 연산자로 비교할 필요 없이 곧바로 큰 숫자를 반환할 수 있다.

이번 문제에서 최소한 삼항 연산자라도 사용했으면 뿌듯함이 +1 했을 텐데...아쉽기만 하다.

profile
꾸준하려 하는 쉽덕놈

0개의 댓글