[Algorithm] 구현 : 체스 세트

💡 알고리즘 구현문제로 분류했다.

문제 🛫


체스 세트

오래된 창고에서 체스판과 체스 기물을 발견했다.
불행히도 기물 별 개수가 부족하거나 많아 한 세트를 이루지 못하고있다.
게임을 하기위해 부족하거나 많은 기물의 개수를 계산하여 반환하는 프로그램을 제작하시오.
기물의 개수는 배열 형태로 아래와 같이 king부터 pawns 순으로 들어오며
한 게임을 하기 위해 필요한 기물의 개수는 아래와 같다.
King(1), Queen(1) Rooks(2), Bishops(2), Knights(2), pawns(8)

TestCase
Input
[0, 1, 2, 2, 2, 7][2, 1, 2, 1, 2, 1]
[0, 1, 1, 5, 3, 6]
Output
#1 [1,0,0,0,0,1]
#2 [-1,0,0,1,0,7]
#3 [1,0,1,-3,-1,2]

분석

배열의 index를 순회하면되는 무난하고 쉬운 구현 문제이다. for loop를 이용해 풀면 된다. 문제 난이도는 최하위 구현 문제이지만, 여기에 여러가지 조건이 붙으면 충분히 어려워질 수 있는 문제라고 생각한다.

풀이 📖


Solution (For Loop)

무난하게 for loop 를 사용해서 풀이했다.

// 체스 세트

let input = [
  [0, 1, 2, 2, 2, 7],
  [2, 1, 2, 1, 2, 1],
  [0, 1, 1, 5, 3, 6]
];

let chessPiece = [1, 1, 2, 2, 2, 8]; // 조건을 만족시켜야하는 체스 피스 배열


function answer(arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === chessPiece[i]) result.push(0); // 동일한 인덱스를 비교한다.
    else result.push(chessPiece[i] - arr[i]);
  }

  return result;
}

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} [${answer(input[i])}]`);
}

Solution 2 (For Loop) 👍🏽

위 솔루션의 코드 리팩토링

// 체스 세트 Refactor

let input = [
  [0, 1, 2, 2, 2, 7],
  [2, 1, 2, 1, 2, 1],
  [0, 1, 1, 5, 3, 6]
];

let chessPiece = [1, 1, 2, 2, 2, 8];


function answer(arr) {
  let result = [];
  let count = 0;
  for (let i = 0; i < arr.length; i++) {
    result[count++] = chessPiece[i] - arr[i];
  }

  return result;
}

for (let i = 0; i < input.length; i++) {
  console.log(`#${i + 1} [${answer(input[i])}]`);
}

Review 💡

알고리즘 문제를 풀때 연습장으로 수학 공식(점화식) 을 작성해서 푸는게 많은 도움이 된다.
answer function에 else 조건에도 자칫 초보자들은 else if로 필요없는 조건식을 더 넣을 수도있다.

상대적으로 난이도가 너무 낮아서 포스팅을 할지 말지 고민을 했는데, 티끌모아 태산이라는 말 처럼 작은 것 하나 하나 기록해두는 습관을 들이는데에 도움이 될 것 같아 글을 작성했다.

좋은 웹페이지 즐겨찾기