같은 문자가 대,소문자를 구분하지 않고 반복되지 않는 단어, isogram

   str = str.toLowerCase();

   if (str.length === 0) {
      return true;
   }

   for (let i = 1; i < str.length; i += 1) {
      if (str[0] === str[i]) {
         return false
      }
   }

   // 재귀
   return isIsogram(str.slice(1))


나를 시달리게 했던 runLength 🙃

function runLength(str) {
   let result = [];

   while (str.length !== 0) {
      let temp = [];

      for (i = 0; i < str.length; i += 1) {
         if (str[0] === str[i]) {
            temp.push(str[0])
         } else {
            break
         }
      }

      result.push(temp.length)
      result.push(temp[0])
   }

   return result.join('');
}


숫자만 들어오는 배열 요소들의 합을 가지고 노는 문제

function superIncreasing(arr) {

   if (arr.length < 2) {
      return true;
   }
   if (arr.length === 2) {
      if (arr[0] < arr[1]) {
         return true;
      }
   }

   let sum = arr.slice(0, arr.length - 1).reduce((acc, cv) => {return acc + cv}, 0)

   if (sum < arr[arr.length - 1]) {
      return superIncreasing(arr.slice(0, arr.length - 1))
   } else {
      return false;
   }
}


풀고나서 회고, 사실 위 처럼 복잡하게 풀지 않았어도 될 것 같다. arr의 0번 인덱스와 1번 인덱스를 비교하고 true 이면 그 둘을 더해서 다시 다음 인덱스오 비교하고 하는 식으로 간단하게 풀 수 있지 않았을까 생각한다. 아래에 생각한 간단한 풀이를 적어본다.

function superIncreasing(arr) {
   let sum = arr[0];
   
   for (let i = 1; i < arr.length; i += 1) {
      if (arr[i] > sum) {
         sum = sum + arr[i]
      } else {
         return false
      }
   }

   return true;
}