728x90

문자열 사이 숨어있는 숫자들만 더한 값을 반환

이때, 연속한 숫자는 붙여서 계산한다.   

 

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

+ Recent posts