JavaScript/알고리즘

프로그래머스 0떼기 JS ( /^0/.test()-0으로 시작하는지? / slice(1)로 맨앞하나만제거 / number는 맨앞의 0이 JS 제거되는 특징 )

hihiha2 2023. 6. 16. 00:41
반응형

문제 설명

정수로 이루어진 문자열 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를 더 공부하면서 추후에 더 업그레이드시켜나가야할 것 같다. 

반응형