본문 바로가기
Algorithm

[javascript] 이것이 코딩테스트다 - 럭키스트레이트

by 랩린안 2022. 9. 16.
/*

- 문제 : 점수가 주어지면 럭키 스트레이트를 사용할 수 있는 상태인지
- 자료 :
정수 N (점수)
N의 자릿수는 항상 짝수 형태



- 조건:
첫째 줄에 럭키 스트레이트를 사용할 수 있으면 "LUCKY" 사용할 수 없으면 "READY" 출력


- 계획:
문자열을 반으로 자른다.
반으로 자른 것을 모두 더한다 (for문 최댓값 문자열 반절의 length)
두 값을 비교한다.


- 반성
반복문을 바꿔보는 거말고는 다른 거 생각하면 넘 오래걸려서 급하게 넘어가게 됨.


*/

// for문
const run = (number) => {
  let result = 0;
  const splitNumber = [...number];

  for (let i = 0; i < number.length; i += 1) {
    result += Number(splitNumber[i]);
  }
  return result;
};

const solution = (number) => {
  const num1 = number.substr(0, number.length / 2);
  const num2 = number.substr(number.length / 2, number.length - 1);

  return run(num1) === run(num2) ? 'LUCKY' : 'READY';
};

// reduce
const run2 = (number) => {
  let result = 0;
  const splitNumber = [...number];

  result = splitNumber.reduce((prev, curr) => Number(prev) + Number(curr));

  return result;
};

const solution2 = (number) => {
  const num1 = number.substr(0, number.length / 2);
  const num2 = number.substr(number.length / 2, number.length - 1);

  return run2(num1) === run2(num2) ? 'LUCKY' : 'READY';
};

// 재귀함수

const run3 = (number, result = 0) => {
  const splitNumber = [...number];

  if (number.length === 0) {
    return result;
  }

  return run3(number.slice(1), result + Number(splitNumber[0]));
};

const solution3 = (number) => {
  const num1 = number.substr(0, number.length / 2);
  const num2 = number.substr(number.length / 2, number.length - 1);

  return run3(num1) === run3(num2) ? 'LUCKY' : 'READY';
};

for문, reudce, 재귀함수를 이용해서 풀어보았다.