✏️ 문제 설명
정수로 이루어진 문자열 n_str이 주어질 때, n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return하도록 solution 함수를 완성해 주세요.
✏️ code
💻 정규표현식 문법
- 기본 특수 문자
기호 | 의미 | 예제 | 설명 |
. | 임의의 한 문자 | a.b | a, 어떤 문자 1개, b |
^ | 문자열의 시작 | ^abc | abc로 시작하는 문자열 |
$ | 문자열의 끝 | xyz$ | xyz로 끝나는 문자열 |
* | 앞 문자가 0번 이상 반복 | b* (b가 아예 없을 수도, 있을 수도 있음) |
abc => ' '(매칭됨) bbabc => bb abbbc => bbb b => b ac => ' '(매칭됨) |
+ | 앞 문자가 1번 이상 반복 | b+ (b가 최소 1번 이상 있어야 함) |
abc => 매칭되지 않음 bbabc => bb abbbc => bbb b => b ac => 매칭되지 않음 |
? | 앞 문자가 0번 또는 1번 등장 | a? | a 또는 없는 경우 |
[] | 문자 클래스: 괄호 안의 문자 중 하나와 매칭 | [abc] | a, b, c 중 하나 |
| | OR 조건 | a|b | a 또는 b |
() | 그룹화 | (abc) | abc를 하나의 그룹으로 간주 |
- 특수 문자(Escape 문자 필요: \)
문자 | 설명 |
\d | 숫자 ([0-9]) |
\D | 숫자가 아닌 것 ([^0-9]) |
\w | 단어 문자 ([a-zA-Z0-9_]) |
\W | 단어 문자가 아닌 것 |
\s | 공백 문자 |
\S | 공백 문자가 아닌 것 |
💻 주요 클래스 및 메서드
- java.util.regex 패키지를 통해 정규표현식을 지원하며, 주요 클래스 및 메서드는 다음과 같습니다.
- Pattern: 정규표현식을 정의하는 클래스. 정규식 패턴을 컴파일하고 Matcher 객체를 생성합니다.
- Matcher: Pattern 객체를 기반으로 실제 문자열과 정규식을 매칭하는 역할을 합니다.
주요 메서드 | 설명 |
Pattern 클래스 메서드 | |
Pattern.compile(String regex) | 주어진 정규식을 컴파일하여 Pattern 객체를 반환합니다. |
Pattern.matcher(CharSequence input) | 주어진 문자열과 정규식을 매칭하기 위한 Matcher 객체를 반환합니다. |
Pattern.matches(String regex, CharSequence input) | 문자열이 정규식과 완전히 일치하는지 확인합니다. (단순 매칭 검사) |
Pattern.split(CharSequence input) | 정규식을 기준으로 문자열을 분리하여 배열로 반환합니다. |
Matcher 클래스 메서드 | |
boolean matches() | 전체 문자열이 패턴과 일치하는지 확인합니다. |
boolean find() | 패턴과 일치하는 부분 문자열이 있는지 확인합니다. 여러 번 호출하면 다음 매칭으로 이동합니다. |
int start() | 마지막으로 매칭된 문자열의 시작 인덱스를 반환합니다. |
int end() | 마지막으로 매칭된 문자열의 끝 인덱스를 반환합니다. |
String group() | 마지막으로 매칭된 문자열을 반환합니다. |
String replaceAll(String replacement) | 패턴에 매칭된 모든 부분 문자열을 주어진 문자열로 치환합니다. |
String replaceFirst(String replacement) | 패턴에 매칭된 첫 번째 문자열을 주어진 문자열로 치환합니다. |
int groupCount() | 그룹화된 캡처 그룹의 개수를 반환합니다. |
String 클래스 메서드 | |
String.replaceFirst(String regex, String replacement) | 정규식에 매칭되는 첫 번째 부분 문자열을 치환합니다. |
String.replaceAll(String regex, String replacement) | 정규식에 매칭되는 모든 부분 문자열을 치환합니다. |
String.matches(String regex) | 전체 문자열이 정규식과 일치하는지 확인합니다. |
String.split(String regex) | 정규식을 기준으로 문자열을 분리하여 배열을 반환합니다. |
// 기본 매칭
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
String input = "hello123world";
String regex = "\\d+"; // 숫자 하나 이상
// 패턴 생성 및 매칭
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println("Matched: " + matcher.group()); // 숫자 출력
}
}
}
// 치환
public class Main {
public static void main(String[] args) {
String input = "hello 123 world 456";
String regex = "\\d+"; // 숫자
// replaceAll 사용
String replaced = input.replaceAll(regex, "#");
System.out.println(replaced); // "hello # world #"
}
}
// 문자열 분리
public class Main {
public static void main(String[] args) {
String input = "apple,banana,grape";
String[] fruits = input.split(",");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
📌 고민했던 부분
- n_str.replaceFirst("^0+", "");
- ^0+: 0으로 시작하는 게 한 번 이상
- replaceFirst: 정규식에 매칭되는 첫 번째 부분 문자열을 치환
// 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/181847?language=java
// 시간: 0.07 ms
// 메모리: 80.3 KB
package programmers;
public class P181847 {
public String solution(String n_str) {
return n_str.replaceFirst("^0+", "");
}
}
반응형
'Java > 코딩테스트' 카테고리의 다른 글
[프로그래머스/181862] 세 개의 구분자 (정규표현식, 스트림API, split, stream, filter, toArray) (0) | 2025.01.07 |
---|---|
[프로그래머스/181903] qr code (배열과 String 클래스의 문자 접근 방식이 다른 이유, .charAt()) (0) | 2025.01.03 |
[코드트리/NL] 중복되지 않는 정수 중 최대 (w. HashMap, Math.max) (0) | 2024.12.29 |
[코드트리/NL] 연속부분수열일까 (w. 슬라이딩 윈도우 알고리즘) (1) | 2024.12.27 |
[코드트리/NL] 나눗셈의 나머지 (1) | 2024.12.25 |