프로그래머스 문제를 풀던 중 문자열이 담긴 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( 포함되어 있는지 알고싶은 문자열, 찾는걸 시작하고 싶은 위치)
아래의 예를 보면 좀더 쉽다.
결과값은 true
근데 만약
이렇다면 결과값은 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
]