주니어 기초 코딩공부/JAVA_programmers_코딩테스트

숨어있는 숫자의 덧셈 (1)_programmers_lev00

jju_developer 2022. 12. 3. 23:42
728x90

<코딩 테스트>

문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

 

<나의 풀이 과정>

처음에는 모든 my_string 값을 String 배열에 담은 후, int 형으로 변환을 할 때에 영문 소문자와 대문자는 숫자 9이상이 넘어가기 때문에 for문으로 1< n <=9 사이의 값의 합을 구하려고 했었습니다.

하지만, 그렇게 하게되면 int 배열도 선언해야하고 생각보다 복잡했기 때문에 받게되는 문자열에서 영문을 다 제거를 먼저 하는 방식을 선택하였습니다.

모든 영문을 소문자로 변환 한 후, 그 값을 삭제 한 후, split 메서드를 이용하여 replace 시켰습니다.

 

<나의 풀이 코드>

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

		replace = my_string.toLowerCase().replaceAll("[abcdefghijklmnopqrstuvwxyz]", "");
		String[] strArr = replace.split("");

		for (int i = 0; i < strArr.length; i++) {
			answer += Integer.parseInt(strArr[i]);
		}
		return answer;
    }
}

 

 

<다른사람 풀이 1>

class Solution {
    public int solution(String myString) {
        return myString.chars().mapToObj(i -> (char) i).filter(Character::isDigit).map(String::valueOf).mapToInt(Integer::valueOf).sum();
    }
}

<다른사람 풀이2>

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

class Solution {
    public int solution(String my_string) {
        int answer = 0;
        String pattern = "^[0-9]*$";
        String[] list = my_string.split("");

        for(int i = 0; i < list.length; i ++) {
            if(Pattern.matches(pattern,list[i])) {
                answer += Integer.parseInt(list[i]);
            }
        }
        return answer;
    }
}
728x90