🎯 문제
문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
<제한사항>
1 ≤ my_string의 길이 ≤ 1,000
1 ≤ my_string 안의 자연수 ≤ 1000
연속된 수는 하나의 숫자로 간주합니다.
000123과 같이 0이 선행하는 경우는 없습니다.
문자열에 자연수가 없는 경우 0을 return 해주세요.
my_string | result |
---|---|
"aAb1B2cC34oOp" | 37 |
"1a2b3c4d123Z" | 133 |
⛳ 답안
import java.util.ArrayList;
import java.util.List;
class Solution {
public int solution(String my_string) {
int answer = 0;
for(int i=0; i<my_string.length(); i++) {
// 아스키코드로 했는데 그냥 정규표현식으로 하는게 제일 짧았을듯
if(Integer.valueOf(my_string.charAt(i))<48 ||
Integer.valueOf(my_string.charAt(i)) >57) {
// 숫자아니면 , 로 교체해주기
my_string=my_string.replace(my_string.charAt(i), ',');
}
}
// 요기서부터 심하게 이상한 짓
// 여기서 애초에 split할때 정규표현식 넣고 대체를 ","로 해줬으면
// 위에 for문은 쓸 필요도 없었던건데...
// my_string.replace("뭐시기","저시기).split("저시기");
// 이런식으로 가능하대...
// 그리고 바보같이 list는 왜만든거야...
String[] array=my_string.split(",");
List<Integer> list=new ArrayList<>();
for(int i=0; i<array.length; i++) {
if(!array[i].equals("")) {
list.add(Integer.valueOf(array[i]));
}
}
for(int i : list) {
answer+=i;
}
// list 안쓰고 바로 이렇게 된다!!!
for(int i=0; i<array.length; i++) {
if(!array[i].equals("")) {
answer+=Integer.valueOf(array[i]);
}
}
return answer;
}
}
🧵 과정
분명 처음 생각은 문자가 나오면 replace으로 ,로 바꿔주고 그 , 기준으로 split 해준다음에 answer에 모든 원소들을 더 하는 방식으로 풀었는데
문자가 연속으로 나오면 ,도 연속으로 찍혀서 for문이 제대로 안돌고 오류가 났다. ,,,1,2,,34,,, 요딴식으로 나옴
그래서 replace해줄때 앞에도 ',' 면 그 ','를 없애주는 조건도 줘보고 별 난리를 쳤는데도 제대로 안됐다...근데 이런 이상한 짓 안해도 되는거였어...
그냥 문자열 반복문 돌려서 ',' 아니면 int로 바꿔서 answer에 더해주기만 하면 되는거였는데 왜 계속 멍청한 짓 하고 있었지...한번 생각이 이상한쪽으로 튀면 자꾸 그 방향으로만 가려고 해서 문제다 그 방식에서 벗어나려는 생각을 안하네...앞으로 조금 길게 잡고 있는다 싶으면 아예 처음부터 다시 생각해보려고 노력해야겠어