[JS 100] 59. 빈칸 채우기

이춘구·2022년 8월 31일
0

js100

목록 보기
9/24

문제

총 문자열의 길이는 50으로 제한하고 사용자가 문자열을 입력하면 그 문자열을 가운데 정렬을 해주고, 나머지 빈 부분에는 '='을 채워 넣어주세요.

입력
hi

출력
========================hi========================

해결 방안

/**
 * @param {number} totalLength 반환할 문자열의 총길이
 * @param {string} word 가운데에 위치시킬 단어
 * @param {string} filler 주어진 단어가 차지하고 남은 자리에 채울 문자열
 * @returns length의 길이를 가지는 문자열 반환
 */
function fillTheBlanks(totalLength, word, filler) {
  // 주어진 단어의 길이
  const wordLength = word.length;

  // 출력해야 할 문자열의 총길이가 단어의 길이보다 짧다면 에러 메시지 반환하고,
  if (totalLength < wordLength) {
    return "출력할 문자열의 총길이가 주어진 단어의 길이보다 짧습니다.";
    // 같다면 단어만 반환한다
  } else if (totalLength === wordLength) {
    return word;
  }

  // 총길이에서 단어의 길이를 뺀 나머지 길이를 구한다.
  const remainingLength = totalLength - wordLength;
  // 나머지 길이를 2로 나눠서 홀짝 판별한다.
  const isEven = remainingLength % 2 === 0;

  // 짝수이면 단어의 좌우에 넣을 문자열의 길이를 동일하게 주고,
  // 홀수라면 왼쪽엔 소수점 이하를 절사한 길이, 오른쪽엔 왼쪽보다 1 길게 준다.
  let leftLength = isEven
    ? remainingLength / 2
    : Math.floor(remainingLength / 2);
  let rightLength = isEven ? leftLength : leftLength + 1;

  // 주어진 길이만큼 filler로 채워진 좌우 배열을 만든다.
  const leftFiller = new Array(leftLength).fill(filler);
  const rightFiller = new Array(rightLength).fill(filler);
  // 적절한 위치에 배치한 배열을 만들고 join해서 문자열로 변환한다.
  const result = [...leftFiller, word, ...rightFiller].join("");

  return result;
}

const result = fillTheBlanks(5, "hi", "=");
console.log(result);
profile
프런트엔드 개발자

0개의 댓글