[프로그래머스]숨어있는 숫자의 덧셈 (1)
숨어있는 숫자의 덧셈 (1)
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
입출력 예
my_string | result |
---|---|
“aAb1B2cC34oOp” | 10 |
“1a2b3c4d123” | 16 |
입출력 예 설명
입출력 예 #1
- “aAb1B2cC34oOp”안의 한자리 자연수는 1, 2, 3, 4 입니다. 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.
입출력 예 #2
- “1a2b3c4d123Z”안의 한자리 자연수는 1, 2, 3, 4, 1, 2, 3 입니다. 따라서 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 을 return합니다.
나의 풀이 코드
import java.util.Arrays;
class Solution {
public int solution(String my_string) {
int answer = 0;
int sum = 0;
my_string = my_string.replaceAll("[a-zA-Z]", "");
char[] arr = my_string.toCharArray();
for(int i=0; i<arr.length; i++){
sum += (int)(arr[i]-'0'); // 중요: -'0' 꼭 써야함.
}
answer = sum;
return answer;
}
}
대소문자 제거하고 자연수 문자들을 형변환해서 합한다.
배운점
class Solution {
public int solution(String my_string) {
int answer = 0;
for(int i=0; i<my_string.length(); i++){
if(Character.digit(my_string.charAt(i), 10) > 0){
answer += Integer.parseInt(String.valueOf(my_string.charAt(i)));
}
}
return answer;
}
}
다른 사람이 푼 코드를 보면
숫자인지 판별하는 if문에는 Character.digit()메서드를 사용하는데 이는 문자를 숫자로 변환한다.
그리고 Character.digit()안에 10은 10진수를 의미한다.
이후 String.valueOf()을 써서 문자열로 바꾸고 Integer.parseInt()를 써서 정수로 변환한다.
새로 배운점 : 보통 문자열로 형 변환 시 toString()을 자주 사용하는데, null값을 문자열로 형 변환 시 NullPointerException를 발생시킨다. 반면 String.valueOf()를 사용하면 전달받은 파라미터가 null이 전달될 경우 문자열 “null”을 반환하기 때문에 String.valueOf()을 사용한다.
class Solution {
public int solution(String my_string) {
int answer = 0;
for(char c : my_string.toCharArray()){
if(c >= '0' && c <= '9'){
answer += c - '0';
}
}
return answer;
}
}
또다른 사람이 푼 코드를 보면 아스키 코드로 조건문을 만들었다.
class Solution {
public int solution(String myString) {
return myString.chars()
.mapToObj(i -> (char) i)
.filter(Character::isDigit)
.map(String::valueOf)
.mapToInt(Integer::valueOf)
.sum();
}
}
또다른 사람이 스트림으로 풀은 코드를 보면
chars() 메서드를 사용하여 문자열의 각 문자로 구성된 스트림으로 변환하고,
mapToObj(i -> (char) i) 코드로 문자를 문자형으로 변환하고,
filter(Character::isDigit) 코드로 숫자인 문자만 필터링하고,
map(String::valueOf) 코드로 각 문자를 문자열로 변환하고,
mapToInt(Integer::valueOf) 코드로 문자열을 정수로 변환하고,
sum()으로 합한다.
Leave a comment