partList.js (7kyu 42)

Codewars 알고리즘 풀이


Problem

  • Write a function that gives all the ways to divide a list of at least two elements into two non-empty parts.
    • 배열의 element를 비어 있지 않은 2개의 부분으로 나눌 수 있는 모든 방법을 반환한다.
    • 각 element는 문자열이다.


Solution 01

function partList(arr) {
  let result = [];
  
  for (let i = 1; i < arr.length; i++) {
    let temp = [];
    
    temp.push(arr.slice(0, i).join(' '));
    temp.push(arr.slice(i).join(' '));
    result.push(temp);
  }
  return result;
}

partList(['HTML', 'CSS', 'JS', 'React']);
// [['HTML', 'CSS JS React'], ['HTML CSS', 'JS React'], ['HTML CSS JS', 'React']]

push(): 배열의 끝에 새 element를 추가하고, 새로운 길이를 반환한다.

slice(): 문자열/배열의 일부를 추출하고, 새 문자열/배열로 반환한다.

join(): 배열의 모든 element를 결합하고, 새 문자열로 반환한다.


Solution 02

function partList(arr) {
  return arr.map((result, i) => [arr.slice(0, i).join(' ').arr.slice(i).join(' ')]).slice(1);
}

partList(['HTML', 'CSS', 'JS', 'React']);
// [['HTML', 'CSS JS React'], ['HTML CSS', 'JS React'], ['HTML CSS JS', 'React']]

map(): 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.