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

공백으로 구분하기2 js로 풀기

by 금화맘 2023. 7. 21.

오늘도 프로그래머스에서 js로 코딩테스트연습을 하고 있습니다.

오늘은 어제의 연장선인 문제가 있어서 곧장 도전해 봤습니다. 바로 공백으로 구분하기 2 였는데요

어젠 split을 통해서 손쉽게 문제를 풀 수 있는 거였어요.

2는 좀더 업그레이드 되서 빈칸을 제외학고 값이 있는 문자열만 배열에 담아 반환하라는 문제였어요

 

먼저 저는 split을 써서 문자열을 빈칸 단위로 쪼개서 빈값은 빼서 반환하려고 했어요.

그러기 위해서 var answer = my_string.split(" ")를 써서 ["","i","","","","love","","you"] 값이 이렇게 나오는 것을 혹인 했습니다. 여기서 "" 된 값을 빼면 되는 거였어요.

그래서 저는 filter를 쓰는게 저의 js 기본 매서드를 사용법을 익히는데 도움이 될거 같아서 사용하기로 했습니다.

일단 제 코드가 제대로 작동 하는지 확인하고 싶어서 빈값인 ""만 나오도록 하고 싶었어요

var answer = my_string.split(" ").filter(a=> (a===" "))

이렇게 코드를 작성 했는데 .filter(a=> (a===" ")) 이 부분이 동작하지 않았습니다. 그냥 [] 빈 배열만 반환했습니다.

그래서 이게 왤까 하고 정규식을 사용해 보기로 했어요

 var reg = /[^\s]+/

  var answer = my_string.split(" ").filter(a=> a == reg )

이렇게 사용하니...  똑같이 []만 나왔고

  var answer = my_string.split(" ").filter(a=> a !== reg ) 이렇게 쓰니

 ["","i","","","","love","","you"] 이렇게 split을 사용한 것에 대한 값만 나오더라구요.

그래서 filter 사용법에 문제가 있는 것 같아서 다시  .filter(a=> (a===" ")) 로 돌아가 괄호를 제거해 봤어요

filter a=> a>0으로 했는데 이것도 []빈배열이 반혼되더라구요

뭑 문제일까 하다가  ["","i","","","","love","","you"] 서 ""가 " "가 아닌게 눈에 띄더라구요

그래서 설마 하고 

my_string.split(" ").filter(a=> a == "")를 썻더니 ["","","",""]이 나와더라구요. 아하? 그래서 ==을 ===으로 바꿔봤더니 다시 []반환하구요. 왜 ===할땐 안되고 ==을 하는데 사용되는지 잘 모르겠지만.. 문자라서 그러려니...하고 

var answer = my_string.split(" ").filter(a=> a !== "")

이렇게 해서 통과했습니다.

 

다른 분들의 풀이를 봤어요.

reg는 어떻게 써야 하는가..너무 궁금해거든요

my_string.split(' ').filter(v => v)

저처럼 빈칸 제외라고 하는게 아니라 값이 존재하면 반환한다로 로직을 사용하신분들 진짜 명쾌하신거 같아요. 난 언제쯤 이런 생각을 하나 라는 생각도 들었답니다.

my_string.trim().split(/ +/)

그리고 이렇게 먼저 빈칸을 제거하고 문자열을 만든 다음에 빈칸을 제거하고 반환하는 거였는데요.

이 코드에서 split을 써야하나라는 생각을 했는데 역시 trim은 "i love you" 이렇게 문자열을 반환하는 거였어요. 그래서 split(/ +/)을 써서 배열로 바꿔서 반환하는 코드였습니다.

 

my_string.match(/[^\s]+/g);

이분도 정규식인 reg를 사용하셨어요. 어쩜 이렇게 깔끔하게 풀수 있지? 란 생각을 하며 좀더 정확한 설명을 보고 싶어서 ai한테 코드를 해석해 달라고 했어요.

 

주어진 문자열 my_string에서 공백이 아닌 단어를 추출하는 코드입니다.

match() 메서드는 문자열에서 정규 표현식과 일치하는 모든 부분을 추출하여 배열로 반환합니다. 이때, 정규 표현식 [^\s]+는 다음과 같이 해석됩니다:

  • []: 문자 클래스를 나타내며, 문자 클래스 안의 문자 중 하나와 일치하는 패턴을 찾습니다.
  • ^: 부정을 의미하며, 문자 클래스 안의 문자들과 반대되는 패턴을 찾습니다.
  • \s: 공백 문자를 의미합니다. 공백 문자는 스페이스, 탭, 개행 등의 공백과 유사한 문자를 포함합니다.
  • +: 1개 이상의 문자를 의미하며, 이어진 문자들을 하나의 단어로 인식합니다.

따라서 [^\s]+ 패턴은 공백이 아닌 문자들이 하나 이상 연속해서 나오는 패턴을 찾습니다. 이 패턴을 사용하여 match() 메서드를 호출하면 문자열에서 공백이 아닌 단어들을 추출한 배열이 반환됩니다. 

 

너무 설명 잘해줌.. 역시 ai 굿~~