본문 바로가기
알고리즘/Programmers

[TIL] 2023.08.03 Programmers_0 떼기

by heereal 2023. 8. 3.

0 떼기

문제 설명

정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return 하도록 solution 함수를 완성해 주세요.

 

입출력 예

n_str result
"0010" "10"
"854020" "854020"

입출력 예 #1

  • "0010"의 가장 왼쪽에 연속으로 등장하는 "0"을 모두 제거하면 "10"이 됩니다.

입출력 예 #2

  • "854020"는 가장 왼쪽에 0이 없으므로 "854020"을 return 합니다.

나의 풀이

function solution(n_str) {
    if (!/^0+/.test(n_str)) return n_str;
    if (/^0+/.test(n_str)) {
        const arr = [...n_str];
        for (const i in arr) {
            if (arr[i] !== "0") return arr.slice(i).join("");
        };
    };
}

정규표현식을 사용해서 문자열의 가장 왼쪽에 "0"이 등장하는지를 판단한다. 그리고 그 여부에 따라 문자열을 그대로 반환하거나 for문을 이용해서 문자열의 왼쪽에 위치한 "0"을 제거한 문자열을 반환한다.

 

 

다른 사람의 풀이 01

const solution = (str) => String(Number(str))

처음엔 이게 뭐지...? 싶었는데 이해하고 나니까 너무 신기하다.... 문자열을 숫자로 변환하면서 너무나도 간단하게 문자열 앞에 위치한 "0"을 제거할 수 있다! 굿 아이디어 👏🏻👏🏻👏🏻

 

 

다른 사람의 풀이 02

function solution(n_str) {
  return n_str.replace(/^0+/, '');
}

정규표현식과 `replace()` 메서드를 이용해서 문자열에서 시작 부분에 연속으로 하나 이상의 "0"이 연속으로 나타나는 부분을 바로 빈 문자열로 대체하여 삭제하는 효과를 낼 수 있다. 나도 문제를 풀면서 정규표현식으로 바로 그 부분을 변환하는 방법이 없을까 고민했었는데 이렇게 쉬운 방법을 왜 생각을 못했을까..?

 


정규표현식 공부하기

해당 정규표현식인 /^0+/은 다음과 같이 해석됩니다:

  • ^: 문자열의 시작을 나타내는 메타문자입니다. 즉, 정규표현식 패턴이 문자열의 시작 부분과 매칭되어야 합니다.
  • 0: 문자 "0"을 나타냅니다. 문자 "0" 하나를 의미합니다.
  • +: 바로 앞의 요소(여기서는 "0")가 하나 이상 연속으로 나타날 수 있음을 나타냅니다. 즉, "0"이 하나 이상 연속으로 나타나는 경우를 찾습니다.

따라서 /^0+/ 정규표현식은 주어진 문자열에서 시작 부분에 연속으로 하나 이상의 "0"이 나타나는 경우를 찾습니다. 예를 들어, "000123", "0", "00ABC"와 같은 문자열에서 모두 매치됩니다. 하지만 "123000", "ABCD000"과 같이 "0"으로 시작하지 않는 경우에는 매치되지 않습니다.

 

 

댓글