문제 설명

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

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

 

제한 사항

  • 1 ≤ p의 길이 ≤ 18
  • p의 길이 ≤ t의 길이 ≤ 10,000
  • t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

 

ex)

t: "3141592"

p: "271"

result: 2

 

나의 solution

function solution(t, p) {
	// answer 배열 생성
    var answer = [];
    for(let i=0; i<t.length; i++) {
        var ele = t.slice(i, i+p.length)
        // 배열에 들어갈 ele의 길이는 p의 길이와 같고 ele의 값은 p보다 작거나 같아야 한다
        if(ele.length===p.length && ele<=p) answer.push(ele)
    }
    // 배열의 길이를 리턴
    return answer.length
}

 

Description

1. slice 메소드를 사용하면 간단하게 해결할 수 있다.

// slice 메소드는 배열의 begin index부터 end index까지(end index는 포함x)에 대한 복사본을 새로운 배열로 반환한다.

array = ['world','earth','sun','moon','mars']

console.log(array.slice(2));
// ['sun','moon','mars']

console.log(array.slice(2, 4));
// Expected output: Array ['sun','moon']

console.log(array.slice(-2));
// Expected output: Array ['moon','mars']

console.log(array.slice(2, -1));
// Expected output: Array ['sun','moon']

헷갈릴 수도 있는 splice 메소드는 아래와 같다.

// splice 메소드는 원본 배열에서 새로운 요소를 추가, 삭제, 교체하여 새로운 배열을 리턴한다.

array = ['world','earth','sun','moon','mars']

// 삭제(시작 index가 음수일 경우 뒤에서부터 요소를 센다)
array.splice(2, 1) // index 2부터 1개의 요소 제거
console.log(array) // ['world','earth','moon','mars']

// 추가
array.splice(2,0,'venus')
console.log(array) // ['world','earth','venus','sun','moon','mars']

2. 문자열 t를 i 인덱스부터 i+p.length 인덱스까지 잘라 변수 ele에 할당한다.

3. ele의 길이가 p의 길이와 같고 ele의 값이 p보다 작거나 같으면 answer 배열에 추가한다.

4. 마지막으로, answer 배열의 길이를 리턴한다.

+ Recent posts