091

[JAVA] 숨어있는 숫자의 덧셈(2) 본문

Coding Test/Programmers(프로그래머스)

[JAVA] 숨어있는 숫자의 덧셈(2)

공구일 2025. 4. 2. 20:07
728x90

🔍자바 : 코딩테스트 . 숨어있는 숫자의 덧셈(2)

 

01. 코드 기획 단계 

- 처음에는 문자열을 문자배열로 만든 다음에 숫자를 추출해내서 더하려고 했지만 연결된 숫자를 구분에 두기 어려워서 숫자만 남길 생각을 해보니 또 개별 숫자로만 합쳐져서 split()으로 나누거나 정규식을 이용하기로 했습니다.


02. 코드 실행 및 오류 잡기

- 정규 표현식(Regex) : 클래스 Pattern과 Matcher을 이용해줬습니다.

import java.util.regex.*;

class Solution {
    public int solution(String my_string) {
        int sum = 0;
        
        Pattern pat = Pattern.compile("\\d+");
        Matcher mat = pat.matcher(my_string);
        
        while(mat.find()){
            sum += Integer.parseInt(mat.group());
        }
        
        return sum;
    }
}

 

- split() : split() 괄호 안에는 구분자를 넣는게 중요합니다. 원하는 결과만 출력하기 위해서는 그렇지 않는 것을 구분자로 넣어야합니다.

괄호 안에 ^는 부정의 의미를 가지고 있어 숫자가 아닌 경우를 구분자로 쓴다는 의미로 그냥 \\D+를 쓰는 것과 같은 의미입니다.

class Solution {
    public int solution(String my_string) {
        String[] num = my_string.split("[^\\d]+");
        int sum = 0;
        
        for(String n : num){
            if(!n.isEmpty()) {
                sum += Integer.parseInt(n);
            }
        }
        
        return sum;
    }
}

 

03. 정리 

- 정규표현식 :  클래스 Pattern과 Matcher

-> Pattern 클래스는 정규 표현식 자체를 저장하는 역할을 하며, 미리 컴파이을 해야합니다. compile 메서드 괄호 안에 정규 표현식을 적어주시면 됩니다. 

-> Matcher 클래스는 Pattern이 찾고자 하는 정규 표현식 패턴을 문자열에서 검색하는 역할을 합니다. find 메서드는 패턴이 발견될 때마다 true를 반환하며, group 메서드는 발견한 패턴을 문자열로 반환합니다. group(1)과 group(2)처럼 특정 값에 접근도 가능합니다.

 

- 정규 표현식 기본 규칙

1️⃣ 문자 그대로 일치 : 'a'는 그대로 a와 일치합니다.

2️⃣ 메타문자(특수한 의미를 가진 문자)

• . : 어떤 문자와도 일치합니다. a.b의 경우 aab, abb, acb 등 어떤 문자가 와도 일치합니다.

• ^ : 문자열의 시작을 의미합니다. ^a의 경우 a로 시작하는지 확인합니다. //대괄호에서는 부정

• $ : 문자열의 끝을 의미합니다. a$는 문자열이 a로 끝나는지 확인합니다.

• [] : 문자 집합을 의미합니다. [abc]는 'a','b','c' 중 하나와 일치합니다.

• | : OR 연산자입니다. a|b는 ‘a’ 또는 ‘b’와 일치합니다.

• + : 1회 이상의 반복을 의미합니다.

• * : 0회 이상의 반복을 의미합니다.

• ? : 0번 또는 1번 나타나는 경우와 일치합니다.

• {n, m} : n번 이상, m번 이하 반복을 의미합니다.

3️⃣ 숫자 및 문자 관련

• \d : 숫자(0~9)와 일치합니다.

• \D : 숫자가 아닌 것과 일치합니다.

• \w : 단어 문자(알파벳, 숫자, _)와 일치합니다.

• \W : 단어 문자가 아닌 것과 일치합니다.

• \s : 공백 문자(공백, 탭, 개행 등)과 일치합니다.

• \S : 공백 문자가 아닌 것과 일치합니다.

 

 

 

728x90

'Coding Test > Programmers(프로그래머스)' 카테고리의 다른 글

[JAVA] 구슬을 나누는 경우의 수  (3) 2025.04.03
[JAVA] 모스부호(1)  (2) 2025.04.03
[JAVA] 공 던지기  (2) 2025.04.02
[JAVA] A로 B만들기  (2) 2025.04.02
[JAVA] 2차원으로 만들기  (2) 2025.04.02