[TIL] 241019 (프로그래머스 주사위 게임 1)

·2024년 10월 19일

TIL

목록 보기
193/268
post-thumbnail

오늘 한 일

  • 알고리즘 코드카타
    • 주사위 게임 1

알고리즘 코드카타

주사위 게임 1

문제

1부터 6까지 숫자가 적힌 주사위가 두 개 있습니다. 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b라고 했을 때 얻는 점수는 다음과 같습니다.

  • a와 b가 모두 홀수라면 a2 + b2 점을 얻습니다.
  • a와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다.
  • a와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다.

두 정수 a와 b가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

풀이

function solution(a, b) {
  if (a % 2 === 0 && b % 2 === 0) {
    return Math.abs(a - b);
  } else if (a % 2 === 0 || b % 2 === 0) {
    return 2 * (a + b);
  } else {
    return a * a + b * b;
  }
}

직관적으로 풀이했다. a와 b가 둘 다 짝수일 경우, 하나만 짝수일 경우,(둘 다 짝수인지 여부는 앞에서 확인했으므로) 둘 다 홀수일 경우를 찾아 각 조건에 맞는 값을 return해주도록 했다.

다른 사람의 풀이

function solution(a, b) {
  const isOdd = (num) => num % 2 === 1;

  return isOdd(a) && isOdd(b)
    ? a ** 2 + b ** 2
    : isOdd(a) || isOdd(b)
    ? 2 * (a + b)
    : Math.abs(a - b);
}

짝수 혹은 홀수를 찾는 식이 반복되기 때문에 이렇게 함수로 제작하는 것도 좋을 것 같다. 항상 반복되는 걸 줄이는 걸 목표로 해야할 것 같다.
또한 **를 사용하여 제곱을 할 수 있다는 것도 다시금 깨달았다. 코드는 반복하면 좋지 않지만, 학습은 계속 반복해야한다.

profile
웹 프론트엔드 개발자

0개의 댓글