문제 🔽
다른사람 풀이 🔽
function solution(want, number, discount) {
let count = 0;
for (let i = 0; i < discount.length - 9; i++) {
const slice = discount.slice(i, i+10);
let flag = true;
for (let j = 0; j < want.length; j++) {
if (slice.filter(item => item === want[j]).length !== number[j]) {
flag = false;
break;
}
}
if (flag) count += 1;
}
return count;
}
내풀이🔽
1. 성공 ⭕
function solution(want, number, discount) {
var answer = 0;
let totalGoodsCnt = number.reduce((acc,value)=>{
return acc+value
},0)
let refArr = []
for(let z=0; z<want.length; z++ ){
for(let k=1; k<=number[z]; k++){
refArr.push(want[z])
}
}
for(let i=0; i+totalGoodsCnt<=discount.length; i++){
let b = refArr.slice()
for(let j=i; j<i+totalGoodsCnt; j++){
if(b.indexOf(discount[j])>=0){
b.splice(b.indexOf(discount[j]),1)
}
}
if(b.length===0){
++answer
}
}
return answer;
}
느낀점🔽
- reduce 용법
reduce( (acc, currentValue) = > { return acc+currentValue } , 0 )
>> 배열을 순회화면서 acc에 값을 계속 더한다, 여기서 0은 acc의 초기값이다.
- slice의 용법 중 하나 > 배열의 깊은 복사
let newArr = oldArray.slice() 는 oldArray를 깊은 복사 한다. (※ 단 .slice() 는 1차원 배열에서만 깊은 복사가 가능하다)
- indexOf 용법
let oldArray = [ "a", "b" , "b", "c" ] 인경우
oldArray.indexOf("b") => 1이 나온다 ( "b" 하나밖에 인지하지 못한다 )
oldArray.indexOf("d") => -1이 나온다 ( 해당하는 값이 없을 경우 -1 이 나온다 )
- 문제를 똑바로 읽자 ...
> 주어진 제한사항을 제대로 읽지 않았다. 읽었다면 더 쉽게 풀 수 있었을텐데...
'Javascript' 카테고리의 다른 글
프로그래머스 코딩테스트 풀이(js) > 할인 행사 (0) | 2023.07.10 |
---|---|
프로그래머스 코딩테스트 풀이(js) > 기능개발 (0) | 2023.07.09 |
프로그래머스 코딩테스트 풀이(js) > 튜플(lv2) (0) | 2023.07.05 |
프로그래머스 코딩테스트 풀이(js) > 의상(lv2) (0) | 2023.07.04 |
프로그래머스 코딩테스트 풀이(js) > 행렬의 곱셈(lv2) (0) | 2023.07.03 |