본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 숨어있는 숫자의 덧셈 (2)

728x90

코드 힌트

  1. 문자열을 순회하며 숫자 찾기:
    • 주어진 문자열을 하나씩 문자 단위로 검사합니다. 이때, 숫자인 경우와 문자(알파벳)인 경우를 구분해야 합니다.
  2. 숫자 연속성 처리:
    • 연속된 숫자를 모아야 합니다. 문자열을 순회하면서 숫자를 발견하면, 이를 모아서 문자열로 저장합니다. 만약 문자가 나오면, 현재까지 모은 숫자를 정수로 변환하여 결과에 더하고, 저장된 숫자를 비워야 합니다.
  3. 문자 후 처리:
    • 문자열 끝에 도달했을 때, 마지막으로 모아 놓은 숫자가 있으면 이를 정수로 변환하여 결과에 추가합니다. 이렇게 해야 모든 숫자를 처리할 수 있습니다.
  4. 숫자 처리 및 초기화:
    • 숫자를 모을 때는 StringBuilder를 사용하여 숫자를 문자열로 쌓습니다. 문자를 만나면, 그동안 모은 숫자를 정수로 변환하고 결과에 더한 후, StringBuilder를 초기화합니다.
  5. 정규식을 활용한 방법:
    • 정규식을 활용하여 문자열을 자르고(split()) int로 타입 변환을 하여 저장하는 방법도 있습니다.

 

 


정답은 더보기 클릭

더보기
class Solution {
    public int solution(String my_string) {
        // 결과를 저장할 변수 초기화
        int result = 0;
        
        // 숫자를 저장할 StringBuilder 초기화
        StringBuilder sb = new StringBuilder();
        
        // 문자열을 순회하며 각 문자 처리
        for (int i = 0; i < my_string.length(); i++) {
            // 현재 문자 가져오기
            char c = my_string.charAt(i);
            
            // 현재 문자가 숫자인 경우
            if (c >= '0' && c <= '9') {
                // 숫자를 StringBuilder에 추가
                sb.append(c);
            } 
            // 현재 문자가 숫자가 아니고, StringBuilder에 숫자가 저장된 경우
            else if (sb.length() > 0) {
                // StringBuilder의 숫자를 정수로 변환하여 결과에 추가
                result += Integer.valueOf(sb.toString());
                // StringBuilder 초기화
                sb.setLength(0);
            }
        }
        
        // 반복이 끝난 후, StringBuilder에 남아 있는 숫자 처리
        if (sb.length() > 0) {
            // 마지막 숫자를 정수로 변환하여 결과에 추가
            result += Integer.valueOf(sb.toString());
        }
        
        // 최종 결과 반환
        return result;
    }
}

 

 

정규식 활용하기

class Solution {
    public int solution(String my_string) {
        // 결과를 저장할 변수 초기화
        int result = 0;
        
        // 숫자를 추출하기 위해 문자열을 정규식으로 분리
        // [a-zA-Z]+는 알파벳이 하나 이상 연속된 부분을 의미합니다.
        // 이 정규식을 사용하여 알파벳을 기준으로 문자열을 나눕니다.
        for (String num : my_string.split("[a-zA-Z]+")) {
            // 빈 문자열이 아닐 경우에만 처리
            if (!num.isEmpty())
                // 추출된 숫자를 정수로 변환하여 결과에 추가
                result += Integer.parseInt(num);
        }
        
        // 최종 결과 반환
        return result;
    }
}
728x90