우선 해커랭크 문제를 계속 풀어보고 있다.
풀면서 거의 기존에 썼던 메소드에게만 의존하게 되는데 아무래도 가장 많이 쓴 만큼 편안한 for 문과 if 문에 치중하게 되는거 같다.
이번 문제는 다른 방식의 반복문에 익숙하지 않아 애를 좀 먹었는데 결국 해결해보니 for문으로만도 풀 수 있었다
그럼 문제부터 보자!

내가 생성해야할 함수는 strings 와 queries 두개의 인자가 주어지고 쿼리의 배열을 바탕으로 각 배열당 스트링의 배열에 몇개씩 있는지를 배열로 반환하는 함수이다.
처음에는 뭐 세개 세개만 들어온다면 빈 배열과 3개의 0을 선언해두고 하나씩 세어보자 라고 생각했으나 문제는 queries 와 strings 안에 3개씩이 고정이 아닌 랜덤한 갯수였던 것이었다.
내가 아는 메서드들로만 사용해서 어떻게 해야하나 한참 고민했다.
// 처음에 생각했던 방법(틀린방법임)
let strings = ['ab', 'ab', 'abc']
let queries = ['ab', 'abc', 'bc']
function matchingStrings(strings, queries) {
let result = [];
let number = 0;
for(let i = 0; i < queries.length; i ++){
for(let j = 0; j< strings.length; j ++){
if(queries[i] === strings[j]){
result[i].push(number++)
}
}
} return result;
}
matchingStrings(strings, queries)
처음에는 이렇게 로직을 짜보았으나 될리가 없지..
어떻게 해야하나 한참 고민하다 떠올려 버렸다 그것을
!!"전개 연산자"!!
[...queries]
그렇다면 전개 연산자를 쓴다면 또 어떻게 쓸것인가? 그냥 무작정 queries 를 전개 연산자를 통해 복사만한다면 그안에 카운트하며 올라가는 숫자를 넣는것은 어떻게?!
그렇다면 이렇게 애초에 queries 의 틀을 가진 배열에 각 0만 남기면 될것이다
let queries = ['ab', 'abc', 'bc']
[...queries].fill(0) // [0, 0, 0]
그리고 다시 재정비한 나의 함수는 다음과 같았다.
function matchingStrings(strings, queries) {
let blankquery = [...queries].fill(0)
for(let i = 0; i < queries.length; i ++){
for(let j = 0; j< strings.length; j ++){
if(queries[i] === strings[j]){
blankquery[i]++
}
}
} return blankquery
}
제출 후 통과!
끝나고 다른 사람들은 어떻게 풀었는지 검색해보았는데 for in이나 for each문을 사용해 쉽게 푼거 같던데 나도 다른 반복문에 좀 익숙했다면 더 쉽게 풀 수 있지 않았을까 싶다 ㅎㅎㅎ 다른 반복문도 좀 익숙해져 봐야겠다.