[JS 문제풀이] - CardLifeGame

rlorxl·2022년 2월 20일
0

문제

라이프 수치가 적혀있는 카드 뭉치가 있습니다. 게임 규칙은 두 명의 참가자가 카드 뭉치에서 라이프가 가장 높은 카드 한 장씩 뽑습니다.
서로 뽑은 카드의 라이프 수치를 갖고 겨룹니다.

배틀 규칙은 다음과 같습니다. 카드의 라이프 수치가 각 x와 y라고 가정합니다.

만약 x == y일 때, 두 카드는 소멸합니다.
만약 x > y일 때, y 카드는 소멸하고 x 카드는 라이프가 y만큼 차감된 후 카드 뭉치로 넣습니다.

이 게임을 계속 진행하다가 남은 카드의 라이프 수치를 출력하는 함수, solution을 완성해주세요.

예를 들어, 카드 뭉치의 라이프 수치 cards가 [4, 8, 6, 1, 2]일 때,

카드 8과 6을 뽑아 배틀하면, 라이프가 2인 카드가 남고, 카드 뭉치는 [4, 1, 2, 2]가 됩니다.
카드 4와 2를 뽑아 배틀하면, 라이프가 2인 카드가 남고, 카드 뭉치는 [1, 2, 2]가 됩니다.
카드 2와 2를 뽑아 배틀하면, 남는 카드가 없고, 카드 뭉치는[1]가 됩니다.
결과 1

[제한 사항]

최종적으로 카드 뭉치에 남은 카드가 없으면 0을 출력합니다.

코드

function solution(cards) {
  while (cards.length > 1) {
    // 정렬
    cards.sort((a, b) => a - b) 
    battle(cards)
  }

  return cards.length ? cards[0] : 0
}

function battle(cards) {
  const life1 = cards.pop()
  const life2 = cards.pop()

  const leftLife = Math.abs(life1 - life2)

  // 남은 카드 추가
  if (leftLife) cards.push(leftLife)
}
profile
즐겜하는거죠

0개의 댓글