오늘도 프로그래머스에서 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 굿~~
'자기개발 > TIL' 카테고리의 다른 글
l로만들기 js (0) | 2023.07.24 |
---|---|
프로그래머스 js 배열비교하기 (0) | 2023.07.22 |
A강조하기에는 a도 A도 A가 나와야 한다 (0) | 2023.07.20 |
앗차! reduce는 그냥 쓰면 문자열로 만들었지! (0) | 2023.07.18 |
array.from({length:?}...로 줄어드는 배열 만들기 (0) | 2023.07.15 |