본문 바로가기
코딩테스트/프로그래머스 0단계 - 기초 트레이닝

프로그래머스 0단계 - 두 수의 연산값 계산하기 / 배열 비교하기

by 학습하는 청년 2024. 4. 8.

두 수의 연산값 계산하기

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

  • 1 ≤ a, b < 10,000
function solution(a, b) {
  let num1 = Number(`${a}`+`${b}`);
  let num2 = 2 * (`${a*b}`);
  return num1 >= num2 ? num1 : num2;
}

// 다른 사람들의 풀이
function solution(a, b) {
  return Math.max( +(a.toString()+b.toString()),2*a*b)
}

템플릿 문자열을 잘 사용하느냐가 관건이었던 문제였다

 

 

 

 

 

 

<다른 사람의 풀이>

1) 정수 a, b를 문자로 바꾼 다음 연결한다.

2) +기호를 붙여 숫자로 변환한다.

3) Math.max()를 사용하여 답을 구한다.


배열 비교하기

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

  • 1 ≤ arr1의 길이 ≤ 100
  • 1 ≤ arr2의 길이 ≤ 100
  • 1 ≤ arr1의 원소 ≤ 100
  • 1 ≤ arr2의 원소 ≤ 100
  • 문제에서 정의한 배열의 대소관계가 일반적인 프로그래밍 언어에서 정의된 배열의 대소관계와 다를 수 있는 점에 유의해주세요.

function solution(arr1, arr2) {
  let sum1 = 0;
  let sum2 = 0;
  let result = 0;
  for (let i = 0; i < arr1.length; i++) {
    sum1 += arr1[i];
  }
  for (let i = 0; i < arr2.length; i++) {
    sum2 += arr2[i];
  }
  result = arr1.length > arr2.length ? 1 : -1;
  if (arr1.length === arr2.length) {
    result = sum1 > sum2 ? 1 : -1;
    if (sum1 === sum2) result = 0;
  }
  return result;
}

풀면서도, "정말 지저분하게 푸네.." 라고 말하며 식을 작성해나갔다..

 

다른 사람들의 풀이도 다 지저분하네...? 어? 기분이 좋다고 해야 하나. 뭐라고 해야 하나 명명하기 어렵구만.

댓글