
정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해주세요.
n_str ≤ 10n_str이 "0"으로만 이루어진 경우는 없습니다.| n_str | result |
|---|---|
| "0010" | "10" |
| "854020" | "854020" |
입출력 예 #1
입출력 예 #2
"0010", "854020" 같은 정수로 이루어진 문자열 n_str'0'들을 전부 제거0은 유지"0"으로만 이루어진 문자열은 없다 → 결과 문자열은 반드시 비어있지 않다즉, “첫 번째 0이 아닌 문자가 나올 때까지의 0들을 제거하고, 그 뒤는 그대로 둔다”는 문제다.
replace 사용가장 간결하면서도 의도가 잘 드러나는 방식은 정규식을 이용한 치환이다.
function solution(n_str) {
return n_str.replace(/^0+/, '');
}
^0+ 정규식의 의미^ : 문자열의 시작을 의미한다.0+ : 문자 '0'이 1개 이상 연속해서 나오는 구간을 의미한다.n_str.replace(/^0+/, '')"0010".replace(/^0+/, '') → "10""854020".replace(/^0+/, '') → "854020" (앞에 0이 없으므로 변경 없음)"00012300".replace(/^0+/, '') → "12300" (맨 앞 0만 제거, 뒤의 00은 유지)의도가 선언적으로 드러난다
“문자열 시작(^)에서 0들을 제거하겠다”라는 의도가 코드 레벨에서 바로 보인다.
구현이 매우 간단하고, 에지 케이스까지 자연스럽게 처리한다.
문제의 요구사항(앞쪽 0만 제거)에 정확히 대응하는 패턴이다.
실무에서도 정규식 기반의 replace는 입력 정제, 포맷팅, 마스킹 등에 매우 자주 쓰이는 패턴이므로 익숙해질 가치가 크다.
정규식을 쓰지 않고, 문자열을 직접 순회하며 첫 번째 0이 아닌 문자의 위치를 찾아 slice 하는 방식도 있다.
function solution(n_str) {
let index = 0;
while (index < n_str.length && n_str[index] === '0') {
index++;
}
return n_str.slice(index);
}
index를 0부터 시작한다.'0'이면 index++'0'이 아닌 문자를 만나면 반복 종료n_str.slice(index)로 해당 위치부터 끝까지 잘라서 반환O(n) → 이 문제 크기(최대 10)에서는 의미 없지만, 길이가 매우 길어져도 효율적이다.정규식을 팀에서 선호하지 않거나, 정규식 사용이 부담되는 초기 학습 단계라면 이 방법도 좋은 선택이다.
이 문제는 입력이 “정수로 이루어진 문자열”이며, "0"으로만 이루어진 문자열은 주어지지 않는다고 명시되어 있다.
따라서 숫자로 한 번 변환했다가 다시 문자열로 바꾸는 방식도 동작한다.
function solution(n_str) {
return String(Number(n_str));
}
혹은:
function solution(n_str) {
return String(parseInt(n_str, 10));
}
Number("0010") → 10 (숫자 타입)String(10) → "10"즉, 숫자 변환 과정에서 자동으로 선행 0들이 제거된다.
Number의 정확도 문제(IEEE 754, 2^53 - 1 초과)가 생길 수 있다."0000000007" 같은 값을 BigInt나 문자열 그대로 다뤄야 하는 케이스에선 부적절하다.이 문제의 제한(길이 ≤ 10, 모두 정수 문자열)에서는 정상적으로 동작하지만,
타입 변환을 로직으로 쓰는 패턴은 “습관”으로 가져가기엔 위험하다는 점을 인지하는 것이 중요하다.
| 접근 | 예시 코드 | 장점 | 단점 | 실무에서의 위치 |
|---|---|---|---|---|
정규식 replace | n_str.replace(/^0+/, '') | 선언적, 간결, 의도 명확 | 정규식 문법 이해 필요 | 문자열 전처리의 주력 패턴 |
| 인덱스 스캔 | while (n_str[i] === '0') i++ | 구현 과정이 직관적 | 코드가 다소 장황 | 정규식 기피 시 대안 |
| 숫자 변환 후 문자열 | String(Number(n_str)) | 코드 짧고 깔끔 | 의미적으론 “숫자 변환”이지 “문자열 처리”가 아님 | 제한된 상황에서만 사용 권장 |
실무적인 관점에서 이 문제를 확장하면 다음과 같은 질문들이 생긴다.
"0"으로만 이루어진 문자열이 들어올 수도 있다면?"0000" → 어떤 결과를 원할 것인가? "0"인지, ""인지?"0"으로 normalize(정규화)하는 편이 자연스럽다.Number로 변환하는 방식은 정확도를 잃는다.^를 쓰는 것이 중요하다. (/0+/g처럼 전체에서 0을 제거하면 완전히 다른 동작을 한다.)이런 고민을 통해 “현재 제약 조건에서 왜 이 풀이가 맞는지”뿐 아니라,
“제약이 바뀌면 어느 지점에서 깨지는지”까지 생각하는 습관이 실무에서 큰 힘이 된다.
이 문제에 대한 가장 추천하는 풀이는 다음과 같다.
function solution(n_str) {
return n_str.replace(/^0+/, '');
}