프로그래머스 : 숨어있는 숫자의 덧셈 (2)

Digeut·2023년 4월 12일
0

프로그래머스

목록 보기
38/164

❔문제설명

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

⚠️제한사항

1 ≤ my_string의 길이 ≤ 1,000
1 ≤ my_string 안의 자연수 ≤ 1000
연속된 수는 하나의 숫자로 간주합니다.
000123과 같이 0이 선행하는 경우는 없습니다.
문자열에 자연수가 없는 경우 0을 return 해주세요.

🤔아이디어

배열 만들어서 숫자면 배열에 넣은다음, 그 값들 더하면 되나..?
영대소문자 기준으로 잘라내서 배열을 만드나??

❌틀린코드

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        String[] strArr = my_string.split("[a-zA-Z]");
        
        for(int i = 0 ; i < strArr.length ; i++){
            if(!strArr[i].isEmpty()){
                answer += Integer.parseInt(strArr[i]);
            } else {
                answer = 0;
            }
        }
        return answer;
    }
}

🙄오류

왜 앞에 1과 2를 인식하지 못했을까

💡코드풀이

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        String[] strArr = my_string.split("[a-zA-Z]+");
        
        for(int i = 0 ; i < strArr.length ; i++){
            if(!strArr[i].isEmpty()){
                answer += Integer.parseInt(strArr[i]);
            } else {
                answer = 0;
            }
        }
        return answer;
    }
}

[a-zA-Z]+만 바꿨을뿐인데 해결이 됐다. 무슨 차이지?

Chat-GPT의 답변

정규 표현식에서 "[a-zA-Z]+"는 영문 알파벳 대소문자 중 하나 이상이 연속으로 나타나는 문자열을 의미하며, "+" 기호는 이전 패턴이 최소한 한 번 이상 반복됨을 나타냅니다. 따라서 이 패턴은 "a", "abc", "Hello", "world" 등의 문자열에 일치합니다.

반면에, "[a-zA-Z]"는 영문 알파벳 대소문자 중 하나만을 의미하며, 이 패턴은 문자열 내에서 단일 영문 알파벳을 찾을 때 사용됩니다. 따라서 이 패턴은 "a", "B", "C", "z" 등의 문자열에 일치합니다.

따라서 "+" 기호의 유무에 따라서 정규 표현식이 찾고자 하는 문자열의 길이와 형태가 달라집니다.

그래서 테스트 1에서 연속된 영소문자들을 인식하지 못해서 1과 2가 잡히지 않았구나!

profile
개발자가 될 거야!

0개의 댓글