stockList.js

Codewars 알고리즘 풀이


Problem

  • A bookseller has lots of books classified in 26 categories labeled A, B, … Z.
    • 26(A, B, … Z)개 카테고리로 분류된 많은 서적이 있다.
  • Each book has a code c of 3, 4, 5 or more capitals letters.
    • 각 책에는 3개 이상의 대문자로 된 코드가 있다.
  • The 1st letter of a code is the capital letter of the book category.
    • 코드의 첫 번째 문자는 책 카테고리의 대문자이다.
  • In the bookseller’s stocklist each code c is followed by a space and by a positive integer n(int n >= 0) which indicates the quantity of books of this code in stock.
    • 재고 목록(stock list)의 각 코드 뒤에는 공백이 있다.
    • 그리고 양의 정수 n(n >= 0)이 표시되는데, 이는 재고 수량을 나타낸다.
  • Your task is to find all the books of L with codes belonging to each category of M and to sum their quantity according to each category.
    • 각 카테고리에 속하는 코드로 모든 책을 찾아 각 카테고리에 따라 수량을 합산한다.



Solution 01

// Books
const book1 = [];
const book2 = ['ABAR 200', 'CDXE 500', 'BKWR 250', 'BTSQ 890'];

function stockList(books, categories) {
  let result = '';
  
  if (books.length === 0 || categories.length === 0) {
    return '';
  }
  
  for (let i = 0; i < categories.length; i++) {
    let sum = 0;
    
    for (let j = 0; j < books.length; j++) {
      if (books[j][0] === categories[i]) {
        sum += parseInt(books[j].split(' ')[1]);
      }
    }
    
    if (result !== '') {
      result += ' - ';
    }
    result += '(' + categories[i] + ' : ' + sum ')';
  }
  return result;
}

stockList(books1, ['A', 'B']);       // ''
stockList(books2, ['A', 'C']);       // (A : 200) - (C : 500)
stockList(books2, ['A', 'B']);       // (A : 200) - (B : 1140)
stockList(books2, ['A', 'B', 'C']);  // (A : 200) - (B : 1140) - (C : 500)