[프로그래머스/JAVA] Lv.0 숨어있는 숫자의 덧셈(0)

또치·2023년 1월 22일
0

프로그래머스 JAVA

목록 보기
9/20
post-thumbnail

숨어있는 숫자의 덧셈(0)

또 쓸데없이 복잡하게 풀었어...심하게 쓸데없는 짓 해버려서 정리도 하기 싫지만...할건 해야지

🎯 문제

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

<제한사항>
1 ≤ my_string의 길이 ≤ 1,000
1 ≤ my_string 안의 자연수 ≤ 1000
연속된 수는 하나의 숫자로 간주합니다.
000123과 같이 0이 선행하는 경우는 없습니다.
문자열에 자연수가 없는 경우 0을 return 해주세요.
my_stringresult
"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에 더해주기만 하면 되는거였는데 왜 계속 멍청한 짓 하고 있었지...한번 생각이 이상한쪽으로 튀면 자꾸 그 방향으로만 가려고 해서 문제다 그 방식에서 벗어나려는 생각을 안하네...앞으로 조금 길게 잡고 있는다 싶으면 아예 처음부터 다시 생각해보려고 노력해야겠어

0개의 댓글