프로그래머스에서 0 떼기라는 문제가 있다.
n_str이라는 문자열이 주어지는데 맨 앞에 0이 있으면 때고 0이 아닌 숫자가 나올때 까지 모든 앞의 0을 떼는 문제였다.
이걸 위해 나는 정규식을 이용해서 사용하는 방법을 떠올렸다.
아무래도 문자열이다 보니 그냥 문자열에서 0을 떼기만 하면 될 것만 같았다.
그래서 정규식을 사용하는? 설명하는 많은 블로그 중에
이 블로그와
이 블로그를 열심히 따라했다.
나는 프로그래머스에서
let reg = //g를 먼저 정의 했고 검색을 시작했다. 위의 두개의 블로그 중 첫번째 블로그에서 [] 바깥의 ^는 문자열의 처음을 의미한다.라는 것을 보고
''' let reg = /^[0]/g을 했는데 결과로는 입력값이 0010 이면 010이 나왔다.
문자열의 처음이 0이니까 0이 하나인 경우만 해당되는 건가 해서 그 위에 0이 아닌 것까지를 나타내기 위해
''' let reg = /^[0\0+]/gi를 해봤다.
그래도 똑같이 010이 나왔다. 뭐가 문제인지 모르겠어서 두번째 블로그를 찾아 들어가 봤고,
일단 ^[0]은 작동하는데 그 이후의 식이 문제인 것 같아서 0이후에 같은 값이 나오는 것이란 것을 나타내는 *을 보게 됐고 적용해 봤다.
''' let reg = /^0*/gi
매우 잘 작동해고 제출해 성공할 수 있었다.
오늘도 수학적 머리를 사용하는 것 보다 하나씩 소거하거나 적용하면서 정규식에 익숙해 지는 느낌이 들었다.
그래도 시간적 여유가 없을 때엔 다른 방법을 찾는게 더 효율적 일 수 있겠다는 생각이 들었다.
차라리 배열로 변경해서 0을 잘라내는 방법이 더 낫지 않을 까 하고 다른 사람들의 풀이를 주의 깊게 살펴보았다.
'''String(Number(n_str)
로 한 사람들이 많았다.
코드를 처음 봤을 때 무슨 소리지? 했는데 생각보다 이렇게 작성한 사람들이 많았고 왜 number로 했다가 다시 string으로 하는 이유가 뭐지? 라고 했는데 문자열로 주어진 상태이기 때문에 숫자열과 문자열의 차이점을 활용한 거였다.
숫자는 0으로 시작할 수 없고 10 혹은 0.1 과 같은건 될 수 있지만 0010은 숫자로 그냥 10이기 때문이었다. 그래서 사람들이 10으로 바꿔서 하고 다시 문자열로 바꿔서 제출하는 거였다. 진짜 똑똑한 사람들이라 느꼈다.
이와 같은 의미로
'''+n_str + ""
로 한 사람들이 있었는데 이건 +를 통해서 문자를 숫자로 바꾸는 작업을 하고 위에 +""를 해서 문자열로 바꿔주는 식이었다.
글고 내가 생각한 것과 완전 같지 않지만 비슷한 생각을 가진 코드가 있었는데 0이 아닌 숫자까지 찾아 그 숫자의 인덱스에서 slice를 해서 반환하는 코드엿다.
function solution(n_str) {
for (let i=0; i<n_str.length; i++){
if (n_str[i] !== "0") return n_str.slice(i)
}
}
'자기개발 > TIL' 카테고리의 다른 글
홀짝에 따라 다른 값 반환하기 js (0) | 2023.07.28 |
---|---|
js 문자열 바꿔서 찾 (0) | 2023.07.27 |
홀수 vs 짝수 js (0) | 2023.07.25 |
l로만들기 js (0) | 2023.07.24 |
프로그래머스 js 배열비교하기 (0) | 2023.07.22 |