문자열 사이 숨어있는 숫자들만 더한 값을 반환
이때, 연속한 숫자는 붙여서 계산한다.
public int solution(String my_string) {
int answer = 0;
char[] arr = my_string.toCharArray();
int temp = 0;
if (Character.isDigit(arr[0])) {
temp = temp + arr[0] - '0';
}
for (int i = 1; i < my_string.length(); i++) {
if (Character.isDigit(arr[i]) && Character.isDigit(arr[i - 1])) {
temp = temp * 10 + arr[i] - '0';
} else if (Character.isDigit(arr[i])) {
temp = temp + arr[i] - '0';
} else {
answer += temp;
temp = 0;
}
}
answer += temp;
return answer;
}
replace 메소드를 사용해서 풀 수 있을거 같았는데 정규식 없이는 오히려 복잡해 질 거 같아
직접 숫자를 분류했다.
숫자를 만나면 일단 temp에 초기화 시켜두고 다음 원소에서 숫자를 만나면 temp의 값에 10을 곱하고 숫자를 더했다.
public int solution2(String my_string) {
int answer = 0;
String[] arr = my_string.replaceAll("[a-zA-Z]", " ").split(" ");
for(String s : str){
if(!s.equals("")) answer += Integer.parseInt(s);
}
return answer;
}
정규식을 사용한 다른사람의 풀이를 참고해 풀어보았다.
모든영어를 " "공백Str으로 변환하고 다시 " "으로 분할하여 String 배열로 반환한다.
이때 split 메소드를 사용한 이유는 toCharArray로 바꾸면 연속한 숫자도 원소로 분할되기 때문에 split메소드로 변환하여
연속한 숫자를 유지해준다.
forEach로 Str 배열을 순회하면서 "" nullString 이 아닌 경우만 더해주면 된다.
'Java > Coding Test' 카테고리의 다른 글
영어가 싫어요 문제풀이 (0) | 2023.09.14 |
---|---|
공 던지기 문제풀이 (0) | 2023.09.14 |
외계어 사전 (0) | 2023.09.12 |
특이한 정렬 문제풀이 (1) | 2023.09.12 |
A로 B 만들기 문제풀이 (0) | 2023.09.11 |