문제 설명
정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.
🙋♀️ 내생각
보자마자 startsWith()가 생각이 났었지만, 0이 여러번 나올경우를 처리하는것이 어려워서 다른 방법을 생각하게 되었다.
startsWith()는 정확히 일치하는 문자열이나 패턴으로 시작하기 때문에 이 문제를 풀기위해서 적절한 메서드는 아니었다.
그래서 그 다음으로 생각한 방법은 그럼 정규식을 이용해서 0이 몇개라도 상관없게만드는 것이었다.
✅ 내 코드
function solution(n_str) {
while (/^0/.test(n_str)) {
n_str = n_str.slice(1);
}
return n_str;
}
while문을 이용해서 조건이 true일 경우에는 특정 동작을 반복하도록 했다.
그리고 while문의 조건으로 (/^0/.test(n_str)) 의 정규식메서드를 사용하였다.
- / / : 정규식의 시작과 끝을 나타내는 구분기호
- ^ : 문자열의 시작
따라서 /^0/ 은 '시작이 0일때'라는 의미이다.
그런 다음 .test(n_str)을 통해서 n_str에 해당하는 값이 존재하는지를 찾는다.
( .test()를 사용하는 이유는 while문의 ()안에는 Boolean값이 들어가야하기 때문이다)
while(/^0/.test(n_str)) 다시 이 코드를 보면, '시작이 0인 값이 존재할 동안'이라고 해석할 수 있다.
그런 다음, while문 안에서는 수행하고자 하는 동작을 적는다.
slice()는 원본의 값을 변경하지 않으면서 새로운 문자열을 생성하기 때문에 n_str = 으로 값을 다시 담아준다.
그리고 n_srt. slice(1)로 가장 맨 앞의 값을 제거한다.
이렇게하면 0으로 시작되는동안 맨앞의 값들이 제거되기때문에 앞에 있는 0은 모두 제거된다.
💻 다른사람 코드중에 배울 것
const solution = (str) => String(Number(str))
나는 while문으로 조건도 넣고 정규식, 메서드를 써서 만들었는데 다른 사람 답을 보다가 이렇게 한줄로 적은것을 보고 놀랐다 ㅋㅋ
이렇게 풀 생각은 못해봤는데 자바스크립트의 특성을 이용하면 이렇게도 풀 수 있겠구나하는 생각이 들었다.
자바스크립트는 문자열을 숫자로 변환하면 맨앞에 있는 0을 무시한다.
0010 ➡️ 10 이 되는 것이다.
이러한 특성을 이용해서 이렇게 간단하게 풀수도 있겠구만했다 😲
function solution(n_str) {
return n_str.replace(/^0+/, '');
}
이 방법도 좋은것 같아서 공부했다.
replace()를 통해서 0을 ''로 치환하여 제거하는 방법이다.
🙋♀️ 내생각
number로 타입변환하는 방법을 이용하거나 replace()이용한 코드를 공부한 이유는 이런식으로 짤 수도있구나하는 것도 있지만 성능적인 면에서도 더 좋은 코드가 아닌가하는 생각이 들어서이다.
아직 알고리즘에 대해 공부하고 있어서 시간복잡도에 대해서 정확히 알지 못하지만, 내가 짠 코드인 while문이나 if처럼 조건을 일일이 검사하면서 특정동작을 다시 반복하고 조건을 검사하고 반복하고 이런식의 코드보다 '더 시간적으로 효율성이 있는 코드가 아닐까?'하는 생각이 들었다.
이 부분은 CS를 더 공부하면서 추후에 더 업그레이드시켜나가야할 것 같다.
'JavaScript > 알고리즘' 카테고리의 다른 글
프로그래머스 간단한 식 계산하기 JS ("연산자"처리하기, if문/switch문/객체 이용하기, eval()은 ❌) (1) | 2023.06.16 |
---|---|
프로그래머스 배열 만들기 2 JS ( /^[패턴]+$/, 정규식으로 숫자를 찾으려면 String으로 타입변환 ) (0) | 2023.06.16 |
프로그래머스 홀수vs짝수 JS (reduce() / map()을 통해서 바로 합구하기) (0) | 2023.06.15 |
프로그래머스 배열 비교하기 JS ( if문,reduce() ) (0) | 2023.06.15 |
프로그래머스 문자열 곱하기 JS ( repeat()- 문자열반복 ) (0) | 2023.06.15 |