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