본문 바로가기
자기개발/TIL

리스트 연습 2

by 금화맘 2023. 7. 10.

리스트를 다루는 법에 익숙해 지기 위해 오늘도 프로그래머스에서 문제를 풀었어요.

오늘은 꼬리문자열1을 풀었습니다.

여러 문자열을 담은 리스트가 있고 문자열 변수를 받아 그 변수를 포함하지 않은 문자열을 반환하는 거였어요.

 

어느 착한 지식인이 답을 만들어 블로깅해주셨더라구요

var answer = str_list.filter((e)=> !e.includes(ex)).join("")

답은 저거였습니다.

 

일단 저의 풀이과정으로 돌아갈께요.

저는 일단 그 배열 안에 문자열이 변수를 갖고 있는지 확인하는 코드를 먼저 한 다음. 

문자열에서 포함이 된게 확인이 되면 !를 붙여서 포함하지 않는 걸로 바꿔서 새로운 변수에 넣은 뒤, join으로 1개의 문자열로 합칠 계획이었어요.

그래서 includes를 사용해 봅니다.

var answer = "";
var answer = str_list.map((char)=> (char.includes(ex)==-1) ? answer.push(char) : "")

var answer = str_list.map((char)=> (char.includes(ex)!=-1) ? answer.push(char) : "")

var answer = str_list.map((char)=> (char.includes(ex)== 1) ? answer.push(char) : "")

그런데 말이죠? 자꾸 push에서 push가 undefinde라고 뜨는 거에요. 뭐가 문제일까 하다가 includes가 문제인가 하며 find르 를 해밨어요. 당연히 안돼죠.. 지금에서 생각하는 거지만 왜 push가 에러가 난건데 다른곳에서 문제인거라고 생각한걸까..이해할 수 없었어요.

그래서 막 오리무중하다가

for문을 사용해 봤어요.

이번에는 

reg를 사용할 계획을 세워 봅니다.

let reg = /ex/g
var answer  '';
for(let i =0; i<=str_list.length;i++){
        console.log(str_list[i].match(reg))
        
    }

를 해요.

그런데 간과한게 reg를 하면 //g 안에 있는게 변수로 인식되는게 아니라 그냥 글자로 인식되더라구요.

당연히 망했죠.

그래서 왜 안될까.. 분명 includes는 문자열이나 배열에서 includes()에서 ()안에 들어있는 걸 포함하는지 안하는지 알려준다 했는데... 그래서 includes가 ()안에 있는걸 변수가 아니라 그냥 글자로 찾아서 인식하나보다 라고 생각하게 됐어요. 착각이었죠.

 

그러다가 정말 아씨 모르겠다 해서 답을 봤고 아씨 뭐야 내 includes는 안되던데! 하고 includes가 괄호 안에 변수도 받는구나 란걸 깨닫고, 내가 식을 잘 못 썻구나를 깨닫게 됩니다.

그리고 map을 써서 하려했을 때 왜 push에서 오류가 나는지 모르겠어서 chatgpt에서 물어보니 위에 변수가 객체로 선언됐는데 이미 선언한 변수를 또 써서 코드를 작성했는데 push로 하면 들어먹질 안게 되는거였죠.

위에 선언한 변수와 실제 코드를 작성한 코드를 분리를 하니 잘 작동했었어요...

그리고 includes에서는 -1이 나올 수 없는 구조였기 때문에 빈 배열만 나왔던 것이었고, ture, false로 하니... 배열에 

[1,"",2] 가 담기더라구요,... 작동을 하는 식이었고 내가 조건을 잘못넣었다는 걸 알수 있었습니다.

암튼 map으로 할때는

 var answer = [];
 let test= str_list.map((char)=> (!char.includes(ex) ? answer.push(char) : "")
 let result= answer.join("")
 return result

이렇게 작성해서 풀 수 있었습니다..녜.. 오늘도 뚠뚠 삽질을 뚠뚠 열심히 했네...

 

1. includes는 ()안에 변수를 사용할 수 있다.

2. 포함하지 않는다는 !char.includes(ex)를 사용하면 char, 즉 value를 받을 수 있다.

3. filter나 includes, match, 정규식의 사용법은 숙지하자. 안되면 매일 읽기라도 도전하자.