Algorithms/프로그래머스

[프로그래머스] '숨어있는 숫자의 덧셈 (1)' - Java

LEFT 2023. 5. 10. 13:44

<문제 제시>

<문제설명>
문자열 my_string이 매개변수로 주어집니다. 
my_string안의 모든 자연수들의 합을 
return하도록 solution 함수를 완성해주세요.

<예시 입출력>


<문제 해결 과정>

문자열 정렬하기(1) 문제와 유사한 문제이다.

정수배열로부터 temp에 입력받은 값들을 answer에 누적해주면 되는 문제이다.

Try 1)

int answer = 0;
        
String string_num = my_string.replaceAll("[^0-9]", "");
int num_int = Integer.parseInt(string_num);

int[] temp = new int[string_num.length()];
int i = 0;

while(num_int > 0) {
    temp[i] = num_int % 10;
    i++;
    num_int = num_int / 10;
}

for(int j = 0; j < temp.length; j++) {
    answer += temp[j];
}

return answer;

>> 몇몇 케이스에서 런타임에러가 발생했다.

Solution 1)

Character.isDigit() 메서드를 이용하여 뽑아낸 char값이 숫자인지의 여부를 판단하고자 하였다.

반환값 = true or false

public static int solution(String my_string) {
    int answer = 0;

    for(int i = 0; i < my_string.length(); i++) {
        if(Character.isDigit(my_string.charAt(i))) {
            answer += my_string.charAt(i) - 48;
        }
    }

    return answer;
}

문자형인 my_string.charAt(i)에서 ( - 48 )을 하게되면 문자열로 값이 출력되는 것이 아닌 정수형 값이 출력된다.

Character.isDigit()을 통해 true가 되면 조건문이 실행되는 방식인 것이다.

( - 48 ) 방식과 유사한 방식으로

my_string.charAt(i)를 (int)로 정수형변환 후 더해주는 방식도 있다.


<전체코드>

package programmers.Lv0;

public class hide_NumOdd {
	
	public static int solution(String my_string) {
        int answer = 0;
        
        for(int i = 0; i < my_string.length(); i++) {
        	if(Character.isDigit(my_string.charAt(i))) {
        		System.out.println("my_string.charAt(i) = " + my_string.charAt(i));
        		System.out.println("my_string.charAt(i) - 48 = " + (my_string.charAt(i) - 48));
        		answer += my_string.charAt(i) - 48;
        	}
        }
        
        return answer;
    }

	public static void main(String[] args) {
		String my_string = "aAb1B2cC34oOp";
		
		System.out.println(solution(my_string));
	}

}

Character.isDigit() 메서드에 대해 알 수 있었고, (int) 정수형 변환과 문자열에서 - 48을 연산해주어 정수형으로 바꿔주는 방법 두가지가 존재한다는 것 또한 알 수 있었다.


문제링크)
https://school.programmers.co.kr/learn/courses/30/lessons/120851

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr