문자열을 특정 횟수만큼 반복해서 새로운 문자열을 생성하기

jinew·2024년 12월 18일

🍎 Javascript

목록 보기
2/22
post-thumbnail

오늘의 알고리즘 코드카타는 특정 패턴을 유지하여 문자열을 리턴하는 함수를 만드는 문제였다.
어제의 회고를 생각하며 삼항연산자를 활용해 문제를 풀었는데 .... 🧐
이번 문제에서는 삼항연산자보다는 repeat() 메소드를 활용하는 것이 성능과 가독성 측면에서 좋다고 한다.. 😅 삼항연산자에 매몰되지 않고 풀어봤으면 다양한 생각을 해봤을 것 같다는 마음도 있지만 그래도 써봤다는 사실에 의의를 두기로 하고, 더 나은 방향을 고민했다는 것에 스스로를 칭찬해주자,,



repeat()


string.repeat(count)

1. 매개변수

  • count : 반복 횟수를 나타내는 양의 정수
  • count는 0 이상이어야 하며, 실수인 경우 소수점 아래는 버려짐
  • count가 0 이면 빈 문자열을 반환
  • count가 음수이거나 무한대(Infinity)이면 RangeError가 발생

2. 반환값

  • 주어진 문자열을 count만큼 반복한 새로운 문자열을 반환

3. 예제

1. 기본 사용법

  console.log("abc".repeat(3)); // "abcabcabc"
  console.log("수박".repeat(2)); // "수박수박"
  console.log("hello".repeat(0)); // ""

2. 실수나 음수를 넣었을 때

  console.log("abc".repeat(2.5)); // "abcabc" (소수점 아래는 버려짐)
  console.log("abc".repeat(-1));  // RangeError: Invalid count value


repeat() 활용 예제


1. 특정 패턴 문자열 생성
: "수박수박..." 처럼 일정한 패턴을 가진 문자열을 만들 때 유용

  function solution(n) {
    return "수박".repeat(Math.ceil(n / 2)).slice(0, n);
  }

  console.log(solution(5)); // "수박수박수"

2. 구분자 반복
: 구분자를 반복해서 특정 문자열을 생성

  console.log("-".repeat(10)); // "----------"
  console.log("=".repeat(5));  // "====="

3. 공백 채우기

  let indent = " ".repeat(4); // 4칸 공백
  console.log(indent + "Indented Text"); // "    Indented Text"



[오늘의 문제 / 수박수박수박수박수박수?]

길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.

  • 제한 사항 : n은 길이 10,000이하인 자연수입니다.
  • 입출력 예
    : "3" > return "수박수"
    : "4" > return "수박수박"
  • 나의 풀이
  function solution(n) {

    let words = "";

    for(let i = 0; i < n; i++){ 
      i % 2 === 0 ? words += "수" : words += "박"
    }
      return words;
    }

  • 삼항연산자를 활용한 개선안 1
  function solution(n) {
    let words = "";

    for (let i = 0; i < n; i++) {
      words += i % 2 === 0 ? "수" : "박";
    }
    return words;
  }

: 복합 할당 연산자를 앞으로 뺄 생각을 왜 못했을까? 모르니까 못했겠지. . 아무래도 내가 작성한 코드보다는 가독성도 좋고 깔끔한 것 같다. 다음에 꼭 활용해볼 것 👀


  • String.repeat()을 활용한 개선안 2
  function solution(n) {
    return "수박".repeat(Math.ceil(n / 2)).slice(0, n);
  }
  1. "수박"
  • 반복의 기본 단위가 되는 문자열
  • "수박"을 여러 번 반복하여 원하는 패턴을 만들 것

  1. .repeat(Math.ceil(n / 2))
  • repeat(count) 문자열을 count만큼 반복하여 새로운 문자열을 생성
  • Math.ceil(n / 2) :
    • n / 2n을 2로 나눈 값
    • Math.ceil()은 소수점이 있는 경우 올림하여 정수로 만듦
      • n=5라면 5 / 2 = 2.5Math.ceil(2.5) = 3
      • n=4라면 4 / 2 = 2Math.ceil(2) = 2
    • 결과적으로 "수박"을 필요한 만큼 반복하여 최소한 n 이상의 길이를 가진 문자열을 만듦
      • e.g. : n=5라면 "수박수박수박"이 생성됨

  1. .slice(0, n)
  • slice(start, end) : 문자열의 start부터 end 바로 앞까지의 부분 문자열을 반환
  • 여기서 start0이고, endn 이므로 문자열의 처음부터 n 길이만큼 잘라냄
  • 이 단계는 "수박"이 반복된 문자열에서 정확히 n 길이만큼만 남기기 위해 사용됨
    • e.g. : "수박수박수박".slice(0, 5)"수박수박수"

입력값 n에 따라 "수박"을 필요한 만큼 반복(repeat())한 뒤, 정확히 n만큼 잘라내는(slice()) 구조!

profile
멈추지만 않으면 도착해 🛫

0개의 댓글