카테고리 없음

JS .includes( ) .Set( ) for문에서 +2하기 Array( ).fill( ).map( )

GABOJOK 2023. 5. 30. 21:02

프로그래머스 문제를 풀던 중 문자열이 담긴 2 배열간에 같은 문자열을 가지고 있는 개수를 구하는 문제가 나왓다. 

나는 for 과 if를 통해 풀었는데, 이유는 filter를 2번 사용해서 어떻게 풀어야 할지 몰랏기 때문이다. 

풀고나서 다른사람들의 풀이를 보았는데,,,,, filter랑  includes를 함께 쓰면 filter로도 풀 수 있는거였다... ㅋㅋㅋㅋㅋㅋ

그래서 정리한다. 

 

아래는 내가 깨달음을 얻은 다른분의 문제풀이 코드다. 

s1과 s2에 각각 문자열들이 담긴 배열이였고, 하나의 배열에는 중복되는 문자열은 없었으며, 그 문자열들은 소문자로만 이루어져 있다는 조건이였다. 

function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}

 

.includes( )

괄호안에 문자열이 .앞에있는 문자열에 포함되어 있니???? 그렇다면 true, 아니면 false를 리턴해주~~

대소문자를 구분해서 문자열과 일치한지 파악후 리턴한다규~~~

 

사용법은

비교하고 싶은 문자열이 담긴 변수.includes( 포함되어 있는지 알고싶은 문자열, 찾는걸 시작하고 싶은 위치)

 

아래의 예를 보면 좀더 쉽다.

let str = 'JavaScript Script';
console.log(str.includes('Script', 11));

결과값은 true

 

근데 만약

let str = 'JavaScript Script';
console.log(str.includes('script', 11));

이렇다면 결과값은 false

 

 

 

2. set ( )

 

 

 

 

 

 

 

3. a+=2   (for 문에서 +2하기!!)

 

프로그래머스에서 이런 문제를 만낫다. 

정수 n이 매개변수로 주어졌는데, 이 n 이하의 홀수들을 오름차순 순으로 담은 배열을 return 하라는 문제였다. 

1<= n <= 100    이라는 범위도 주어졌다. 

 

나는 이렇게 풀었는데, 왜냐면 c+2가 안먹혔기 때문이였다!!!!!

function solution(n) {
    let a = [];
    for(let c = 1; c <= n; c++){
        a.push(c);
    }
    // a.filter(p => p%2 !== 0)
    return a.filter(p => p%2 !== 0);
}

당연히 c+2가 먹힐꺼라고 생각했는데, 아주 바보같은 생각이였다 ㅋㅋㅋㅋ

'++'연산자는'++1' '+=1'의 축약 버전이므로 '+=2'라고 작성하면 2씩 증가된다. 

그래서 당연히도 c+2 가 아니라 c+=2 라고 적었어야 했던것,,,,

이 하나때문에 엄청 돌아갔다는,, 사실,,,,, ㅎㅎㅎ

기억하자😂 

 

 

 

4. Array( ).fill( ).map( )

우선 Array 에 대해서 알아야 한다.

 

console.log(Array(5));

라고 입력하면 결과값은 

[ <5 empty items> ]

이렇게 나온다. 

 

이 말은 5개의 내용물을 가진 배열을 생성했는데, 내용물 비어있어 !! 라는 말!!!!

 

그럼 .fill( ) 은???

괄호 안에 숫자로 배열 안에를 채워조!! 이런말이다. 

단 map이랑 같이 쓰면 map으로 인해 덮이기 때문에, 빈 괄호로 써도 괜찮다.

그래서 코드를 보면

 

console.log(Array(5).fill(3)); 

라고 입력하면 아래와 같이 나온다. 

[ 3, 3, 3, 3, 3 ]

 

 

그럼 여기에 .map 조합은??

 

이 배열 안에를 map으로 돌릴껀데, 매개변수를 2개를 줄꺼야! (v, i) 이렇게!!

그리고 그중 v는 배열의 각 요소. 를 말해!!

그리고 i는 v가 그 배열에서 몇번째 인덱스 인지를 말해!!

 

그래서 

console.log(Array(20).fill( ).map((v,i) => i+1));

이말은 해당 배열의 i번째 요소인 v의 값으로 i+1을 넣어주겠다는 의미이다. 

 

결과값은 아래와 같다. 

[
   1,  2,  3,  4,  5,  6,  7,
   8,  9, 10, 11, 12, 13, 14,
  15, 16, 17, 18, 19, 20
]