부트캠프 내에서 금요일마다 알고리즘 테스트가 진행되고 있는데,
직접적인 문제를 가져오지는 보여주진 말라고 해서 그럼 약간 돌려서(??) 푸는 방법을 올려보려고 한다.
생각보다 문제의 난이도가 있다고 생각하고 있고, 프로그래머스는 옛날의 문제들이 쌓였지만
이것은 최근에 계속 만들고 있는 문제라고 하셔서
조금은 새로운 것도 좋지 않나 라는 생각이 들어서 아무튼 올린다.
영어 단어가 담긴 문자열의 형태로 공백
이 포함되어있는 문자열이 제공됩니다.
이것을 공백이 없는 형태로 반환해주세요.
연속 공백
이 존재할 수 있습니다.
ex) " p ro s g ram mi ng "
왜... 왜 공백이 여러개가 안보여지는거야 이 멍청한 마크업랭기지야
ex) "programming"
function noSpaces(str) {
return str.split("").filter((a) => {return a === " " ? false : a;}).join("");
}
그리고 이 글을 적는 순간 생각이 나서 저번에 삽질했던 문제의 코드 일부를 가져왔다.
function noSpaces(str) {
return str.trim().replace(/\s{1,}/gi,'')
}
정규식의 표현법인데 여기서 또 깨달음을 얻었다.
trim()
이 필요가 없다;
trim()은 좌우의 공백을 없애주는 역할을 하는 메소드인데 이게 필요가 없다 이말이야 에휴 멍청아
요것은 앞에 조건을 걸고 뒤에는 조건에 맞는 것을 바꿀 수 있는 메소드다.
let name = "김치깍두기총각김치배추김치"
name.replace(김치,고구마)
이렇게 사용할 경우에는
조건의 제일 첫번째만 변경되는 것이 replace의 특징이다.
그래서 이것을 여러번을 바꾸기 위해서는 전설의 레전드 정규식
을 사용해야한다.
정규식을 설명하기에는 진짜 너무너무 난해하고 정확하게 알진 못해서 (게임에서는 열심히 정규식으로 놀았던 것 같은데)
function noSpaces(str) {
return str.replace(/\s/g,'')
}
/ = 정규식 선언
\s = 공백
/ = 정규식 조건 분리
g = 1회가 아닌 문자열의 전부
, = replace 조건, 변경 값 구분
'' = 공백이 없는 상태
라고 해서 str을 replace 메소드를 선언하고 1개 이상의 공백을 전부 공백이 없는 상태로 만든다. 와 같다.
결론 = 정규식...공부...해야겠지....?