본문 바로가기

Java/프로그래머스

[JAVA] 프로그래머스 - 숨어있는 숫자의 덧셈(2)

https://school.programmers.co.kr/learn/courses/30/lessons/120864

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

 

문제 풀이 

[Java] 자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제 (tistory.com)

 

[Java] 자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제

정규표현식(Regular Expression)이란 컴퓨터 과학의 정규언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 입니다. 개발을 하다보면 전화번호, 주민등

coding-factory.tistory.com

 

1) 정규 표현식(Regular Expression)

 

- 컴퓨터 과학의 정규언어로부터 유래한 것으로 특정한 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식언어 

- 정규 표현식을 작성하는 방법은 자바 API java.util.regex 패키지를 사용해야 한다. 

- java.util.regex 패키지 안에 있는 Pattern 클래스와 Matcher 클래스를 주로 사용한다. 

 

 

2) Pattern 클래스 

 

- 정규 표현식에 대상 문자열을 검증하는 기능은 java.util.reg.Pattern 클래스의 matches() 메소드를 활용하여 검증할 수 있다.

- matches() 메서드의 첫 번째 매개값은  정규표현식이고 두번째 매개값은 검증 대상 문자열이다. 

- 검증 후 대상 문자열이 정규표현식과 일치하면 true, 그렇지 않다면 false 값을 리턴한다. 

 

import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
    
            String pattern = "^[0-9]*$"; //숫자만
            String val = "123456789"; //대상문자열
        
            boolean regex = Pattern.matches(pattern, val);
            System.out.println(regex);
    }
}

 

 

3) Matcher 클래스

 

- Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다. 

- Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있다. 

- Mathcer 객체는 Pattern 객체의 matcher() 메소드를 호출하여 받아올 수 있다. 

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
            Pattern pattern = Pattern.compile("^[a-zA-Z]*$"); //영문자만
            String val = "abcdef"; //대상문자열
	
            Matcher matcher = pattern.matcher(val);
            System.out.println(matcher.find());
	}
}

 

 

 

정답 

 

import java.util.regex.*;

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        Pattern pattern = Pattern.compile("\\d+"); // 숫자 패턴
        Matcher matcher = pattern.matcher(my_string);
        
        while (matcher.find()) {
            answer+=Integer.parseInt(matcher.group());
        }
        return answer;
    }
}

 

 

 

다른 사람의 풀이 

 

1)

class Solution {
    public int solution(String my_string) {
        int answer = 0;

        String[] str = my_string.replaceAll("[a-zA-Z]", " ").split(" ");

        for(String s : str){
            if(!s.equals("")) answer += Integer.valueOf(s);
        }

        return answer;
    }
}

 

 

2)

import java.util.StringTokenizer;

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        String s = my_string.replaceAll("[^0-9]", " ");
        StringTokenizer st = new StringTokenizer(s, " ");

        while (st.hasMoreTokens()) {
            answer += Integer.parseInt(st.nextToken());
        }

        return answer;
    }
}