[프로그래머스] Lv.0 잘라서 배열로 저장하기 JavaScript

Janet·2023년 4월 13일
0

Algorithm

목록 보기
138/314

문제 설명

문자열 my_str과 n이 매개변수로 주어질 때, my_str을 길이 n씩 잘라서 저장한 배열을 return하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ my_str의 길이 ≤ 100
  • 1 ≤ n ≤ my_str의 길이
  • my_str은 알파벳 소문자, 대문자, 숫자로 이루어져 있습니다.

입출력 예

my_strnresult
"abc1Addfggg4556b"6["abc1Ad", "dfggg4", "556b"]
"abcdef123"3["abc", "def", "123"]

입출력 예 설명

입출력 예 #1

  • "abc1Addfggg4556b" 를 길이 6씩 잘라 배열에 저장한 ["abc1Ad", "dfggg4", "556b"]를 return해야 합니다.

입출력 예 #2

  • "abcdef123" 를 길이 3씩 잘라 배열에 저장한 ["abc", "def", "123"]를 return해야 합니다.

유의사항

  • 입출력 예 #1의 경우 "abc1Addfggg4556b"를 길이 6씩 자르면 "abc1Ad", "dfggg4" 두개와 마지막 "556b"가 남습니다. 이런 경우 남은 문자열을 그대로 배열에 저장합니다.

문제풀이

💡 문제풀이 과정

  • 답안 1번: for() 반복문을 이용하여 i = 0부터, i < my_str.length; i += n;i = i + n만큼씩 증가하도록 해준다. 빈 배열인 answer에 문자열을 n 길이 만큼씩 잘라 push()하는데, 문자열을 나누는 메소드가 3가지가 있다. slice(시작 인덱스, 끝나는 인덱스), substring(시작 인덱스, 끝나는 인덱스), substr(시작 인덱스, 자를 길이)이므로, 세 가지 모두 사용 가능하다. slice()substring()의 경우 시작 인덱스를 i로, 끝나는 인덱스를 i + n으로 하면 되고, substr()을 사용할 경우엔, 시작 인덱스를 i로, 잘라낼 길이는 n으로 하면 되겠다. (아래 답안 참고)
  • 답안 2번: 문자열이 아닌 배열의 형태일 때 잘라내는 메소드는 splice()가 있다. 이 메소드는 원본 배열의 형태를 변형 시킨다. 따라서 let arr = my_stri.split(””); 하여 배열 형태로 변수에 선언하여 while()문을 통해 arr.length가 1이상인 동안 동작을 수행하도록 한다. splice(시작 인덱스, 잘라낼 길이) 로 배열을 잘라내는데, 이 잘라낸 배열을 join(””)하여 빈 배열인 answer에 담아준다. while (arr.length) answer.push(arr.splice(0, n).join(””));
  • 답안 3번: match()정규 표현식을 사용한 다른 사람의 풀이다. 아래 코드를 간단히 풀이 해보자면 {1,}{Min,}은 최소 Min개 이상이라는 뜻으로 문자열안의 문자가 최소 1개 이상이어야 하며, ${n}은 주어진 매개변수를 불러와 문자열의 길이를 n개로 구성하겠다는 뜻이다. 두 번째 인자의 “g”는 정규식의 플래그로 g는 Global, 전역 옵션인데 문자열 내의 모든 패턴을 검색 한다는 의미이다. 즉, 주어진 my_str 문자열에서 문자의 길이를 6개씩 자른 것(문자는 최소 1개 이상으로 구성되어야 함)을 match()메소드를 이용하여 배열로 나열하여 반환한다.
return my_str.match(new RegExp(`.{1,${n}}`, "g"));

✅ 답안 #1

function solution(my_str, n) {
  let answer = [];
  for (let i = 0; i < my_str.length; i += n) answer.push(my_str.substr(i, n));
  // answer.push(my_str.substring(i, i + n));
  // answer.push(my_str.slice(i, i + n));
  return answer;
}

✅ 답안 #2

function solution(my_str, n) {
  var answer = [];
  let arr = my_str.split("");
  while (arr.length) answer.push(arr.splice(0, n).join(""));
  return answer;
}

✅ 답안 #3

function solution(my_str, n) {
  return my_str.match(new RegExp(`.{1,${n}}`, "g"));
}
profile
😸

0개의 댓글