스터디 기록 24

유아현·2023년 1월 13일
0

Study

목록 보기
25/27
post-thumbnail

문제 목록

❤️‍🔥 n^2 배열 자르기

function solution(n, left, right) {
 /*
  결과는 어차피 인덱스 left부터 right까지 리턴이니까 반복 범위를 리턴 범위로 설정하기
  x값 => i % n
  y값 => i / n 
  */

  const arr = [];

  for (let i = left; i <= right; i++) {
    const x = i % n;
    const y = parseInt(i / n);
    arr.push(Math.max(x, y) + 1);

    console.log(x);
    console.log(y);
  }

  console.log(arr);
  return arr;
}

solution(4, 7, 14);

*/

해당 문제는 2차원 배열에 나타난 배열의 위치를 보면 각 인덱스의 숫자가 나타나 있음을 확인하고 해당 인덱스를 뽑아오기 위해 x와 y로 각각 행과 열을 구해 둘 중 큰 것에 +1한 것을 push하는 방식으로 풀이하였다. 공식을 활용해 풀었지만 이 방법이 바로 생각나지 않아서 좀 헤매었던 문제... ㅎㅅㅎ..

❤️‍🔥 크기가 작은 부분 문자열

✨ 코드 1

/*
p와 비교하기 위해서 t를 p길이만큼인 부분문자열을 만들어 주어야 한다.
부분문자열 = t 처음부터 p의 길이만큼 => 첫번째 글자 제거 후 => t 처음부터 p의 길이만큼 => ...
! p와 길이 패턴이 같을 때까지 반복해서 push

그렇게 만들어 준 문자열 패턴 배열을 순회하면서 Number 타입 p랑 비교해서
? 작거나 같으면 횟수를 cnt하고 cnt 리턴
*/

function solution(t, p) {

  let cnt = 0;

  // t를 p와 비교하기 위한 부분문자열 배열 만들어 주기
  const partStr = [];
  while (t.length) {
    if (t.length < p.length) break;
    const str = t.slice(0, p.length);
    partStr.push(str);
    t = t.slice(1);
  }
  console.log(partStr);

  // 부분문자열 배열과 p를 비교해서 작거나 같으면 cnt
  for (let i = 0; i < partStr.length; i++) {
    const tNum = Number(partStr[i]);
    const pNum = Number(p);
    if (tNum <= pNum) cnt++;
  }

  console.log(cnt);
  return cnt;
}

solution('3141592', '271');

while문을 통해 문자를 하나씩 밀어주면서 p와 길이가 같은 문자열들을 만들어 partStr에 push해 주었다. 비교할 문자 목록들을 만들어 준다음에 for문을 통해 하나씩 비교할 문자 목록 배열을 순회하면서 p보다 같거나 작은지 확인해 주어 맞다면 cnt를 올려주는 방식으로 풀었으나 스터디를 통해서 굳이 저렇게 하드코딩을 할 필요는 없었다는 것에 반성하게 됐다.... 알고 있는 메서드를 최대한 사용하려고 노력해야 될 것 같다

✨ 코드 2

function solution(t, p) {

  // let cnt = 0;

  // t를 p와 비교하기 위한 부분문자열 배열 만들어 주기
  const partStr = [];
  while (t.length) {
    if (t.length < p.length) break;
    const str = t.slice(0, p.length);
    partStr.push(str);
    t = t.slice(1);
  }
  console.log(partStr);

  // 부분문자열 배열과 p를 비교해서 작거나 같으면 cnt
  const cnt = partStr.filter((e) => Number(e) <= Number(p)).length

  console.log(cnt);
  return cnt;
}

solution('3141592', '271');

스터디를 통해 비교하는 문자 목록 partStr 배열을 순회하는 for문을 없애고 filter를 사용하여 보다 깔끔한 코드로 수정하였다!

✨ 동원님 코드

function solution(t, p) {
  let arr = [];

  for(let i=0; i<t.length; i++){
    // arr 배열에다가 
    arr.push(t.slice(i, i+p.length))
  }

  arr = arr.filter((a,b) => a.length === p.length).filter((a) => a <= p)
  return arr.length
}

동원님 코드를 보면 비교할 문자 목록을 만들어주는 부분에서 나와는 다르게 for문을 쓰셔서 비교 문자들을 push해 주는 방식으로 한 것도 깔끔해 보인다.

0개의 댓글