코드노트

프로그래머스 자바스크립트 크기가 작은 부분 문자열 본문

Code note/자바스크립트 알고리즘 문제풀이

프로그래머스 자바스크립트 크기가 작은 부분 문자열

코드노트 2022. 12. 30. 21:38
let t = "3141592";
let p = "271";

숫자로 이루어진 문자열 t와 p가 주어질 때,
t에서 p와 길이가 같은 부분문자열 중에서,
이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를
return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우,
t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다.
이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

- 문제를 해석하면 쉬운 문제다. 간단하게 말하면!

- p의 길이는 3이다. t의 문자를 3개씩 순차적으로 자른다.

- 314, 141, 415, 159, 592

- 이 5가지 수를 p=272과 비교해서 작은 수를 count하면 끝나는 문제이다.

 

여기서 규칙 하나를 찾으면 된다. 우선 for문을 돌려야하기 때문에 몇번을 돌릴지 찾으려면

t의 길이 - p의 길이 + 1을 하면 된다.

 

- p의 길이인 3으로 t를 한번잘라내면 t의 길이인 7에서 3을 뺀 나머지 4가 된다.

- 순차적으로 하나씩 숫자를 만든다고 생각해보면 4번을 더 만들 수 있는 거다. 그럼 처음 만드는 수 1 그리고 4를 더하면 5가 된다.

 

let t = "3141592";
let p = "271";

function solution(t, p) {
  var answer = 0;
  let length = p.length;
  let max = t.length + 1 - p.length;
  let arr = [];
  for (let i = 0; i < max; i++) {
    arr.push(t.slice(i, length + i));
  }

  for (let i = 0; i < arr.length; i++) {
    if (arr[i] <= p) answer++;
  }

  return answer;
}
console.log(solution(t, p)); // 2

- 우선 p의 길이를 담는다.

- 그리고 t.length - p.length + 1을 해준다. ( 이만큼 for문을 돌려서 만들 수 있는 수를 모두 만들어준다.)

- 첫번째 for문을 통해서 slice로 잘라내서 배열에 담아준다.

- 그리고 두번째 for문을 통해서 p의 수보다 낮은 수를 찾아서 count하면 끝!

 

 

오랜만에 코딩테스트를 해봤는데 잘 풀리는거 같다. 점점 레벨을 올리면서 하루? 이틀에 한문제씩은 꼭 풀어야겠다.