역시 프로그래머스는 계속 새로운 문제가 나와서 좋다.
level.1을 다 풀었지만 새로 문제가 추가되어서 풀어봤다.
나의 풀이
function solution(t, p) {
const pLength = p.length
const substrings = [...t].reduce((acc,cur,i,arr) => {
if(i <= arr.length-pLength) acc.push(t.slice(i, i+pLength))
return acc
},[])
const result = substrings.filter(value => +value <= +p)
return result.length
}
문제를 보고 아 reduce를 통해서 p.length에 맞게 t를 쪼갠 문자열을 만들고 filter로 걸러내서 그것의 length로 출력하면 되겠다해서 바로 만들었다.
하지만 풀고나서 다른 사람 풀이를 보니 굳이 p.length에 맞게 쪼깬 배열이 필요없을 것 같았다. 바로 count만 해주면되니까.
for문을 활용해서 count만 체크하는 풀이가 더 좋다
풀이 2
function solution(t, p) {
const pLength = p.length
let count = 0
const nobody = [...t].forEach((_,i) => {
if(i <= t.length-pLength){
if(+t.slice(i, i+pLength) <= +p){
count += 1
}
}
})
return count
}
왜 그냥 [...t]를 하면 에러가 뜰까?
왜 변수로 지정해줘야 에러가 뜨지않을까?
이 풀이도 비효율적이다. index가 t.length-pLength 까지만 하면 되는데 이 풀이는 끝까지 순회를 하기에 비효율적이다.
다른 사람 풀이
function solution(t, p) {
let count = 0;
for(let i=0; i<=t.length-p.length; i++) {
let value = t.slice(i, i+p.length);
if(+p >= +value) count++;
}
return count;
}
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스] level.1 덧칠하기 (0) | 2023.05.16 |
---|---|
[프로그래머스] level.1 추억 점수 (0) | 2023.05.16 |
[프로그래머스] level.2 전력망을 둘로 나누기 ★★ (0) | 2023.04.14 |
[프로그래머스] level.1 삼총사 (0) | 2023.04.13 |
[프로그래머스 - JS] level.1 체육복 (0) | 2023.02.17 |