프로그래머스 기본 문제를 풀 던 도중 split에 대한 속성을 더 자세히 알게 되어 작성해보았다.

문제는 위와 같았는데 나는 당연히 split(' ') 으로 공백 기준으로 나눠주면 될 것이라고 생각했으나, 3번 제한사항으로 인해 결과물은 생각과 다르게 나왔다.


프로그래머스 기초나 level 0-1 단계를 풀다보면 split을 활용하는 문제들이 많은데, 이 문제를 풀면서 생각보다 split에 여러가지 성질이 있고, 그래서 활용할때 주의해야겠다는 생각이 들었다.
위와 같은 결과가 나온 이유는 크게 2가지라고 생각한다.
split은 무엇을 제거하는 기본 성질이 아닌, 구분자를 기준으로 앞뒤로 자른 후 삭제한다.
처음에는 split(' ')을 통해 모든 공백을 제거할 수 있을것이라 생각했지만, 막상 코드를 실행하면 위 결과물 사진과 같은 값이 나오는데 그 이유는 아래와 같다.
💡 split(' ')는 연속된 구분자를 한 번만 구분하기 때문에 중간에 오는 공백값이 4개라면, 한번만 구분하여 1개를 삭제한 나머지 3개는 남겨둔다.
split(' ')은 연속된 공백 문자열을 하나의 구분자로 간주하지 않고 한번만 구분하지만,
split("a")는 연속된 "a" 문자열을 모두 구분한다.
테스트2 결과값과 같이 split(' ')을 활용해 공백 기준으로 나눈다고 하더라도, 맨앞과 맨뒤의 공백은 전혀 영향 받지 않고 개수도 항상 똑같이 유지되는 것이다.

맨앞과 맨뒤 양끝 공백을 제거해주는 trim 함수와 split 정규표현식을 활용해 공백 기준으로 나눠주었더니, 아래와 같은 결과가 나왔다.

💡 split(' ') 과 split(/\s+/)의 차이점
- split(' '): 연속된 공백문자가 아니라, 공백 문자 하나(' ')를 구분자로 사용하여 분할
- (/\s+/): 연속된 공백문자를 구분자로 인식하여 분할
split(/\s+/)은 split(' ')과는 다르게 공백문자를 일일이 따로따로 인식하는것이 아니라, 공백을 하나의 통으로 인식하기 때문에 연속된 구분자를 한번만 구분하는 split()의 특성에도 불구하고 중간에 있는 모든 공백이 제거될 수 있다.
내가 쓴 답 이외에도 다양한 코드가 많아 다른 코드 작성 시 활용할 수 있을 것 같아 가져왔다.

split(' ')을 활용해 공백기준으로 나눠 배열로 변환 한 후 filter로 남아있는 공백을 걸러주는 방식이다.