문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
입출력 예
입출력 예 설명
입출력 예 #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합니다.
유의사항
- 연속된 숫자도 각각 한 자리 숫자로 취급합니다.
1. 내가 푼 코드(replaceAll과 foreach)
class Solution {
public int solution(String my_string) {
String str = my_string.replaceAll("[a-z,A-Z]", "");
int answer = 0;
for (char c : str.toCharArray()) {
answer += c-'0';
}
return answer;
}
}
- 다른 문제에서 알게된 replaceAll을 사용해서 숫자를 분리한 다음 더해주었다!
2. 다른 풀이 ( Character.getNumericValue )
class Solution {
public int solution(String my_string) {
int answer = 0;
String str = my_string.replaceAll("[^0-9]","");
for(char ch : str.toCharArray()) {
answer += Character.getNumericValue(ch);
}
return answer;
}
}
- Character.getNumericeValue(char ch) : 숫자 형태의 char형을 int형으로 변환
3. String을 통째로 for문
class Solution {
public int solution(String my_string) {
int answer = 0;
for(int i=0;i<my_string.length();i++){
answer += (48 < my_string.charAt(i) && my_string.charAt(i) < 58 ) ? Integer.parseInt("" + my_string.charAt(i)) : 0 ;
}
return answer;
}
}
- 마지막 코드가 제일 시간이 오래 걸린다. 아무래도 my_string 전체 다 for문으로 돌려서 그런 것 같다.
- char ch - ‘0’ 말고 Character.getNumericValue(ch)으로 변경해도 된다!
- 마지막 코드에 삼항연산자로 바꿔보았더니 알아보기가 좀 힘든 것 같기도.. 하다.. 아닌가..
'algorithm > Programmers' 카테고리의 다른 글
[Java] 중복된 문자 제거 (0) | 2023.01.27 |
---|---|
[JAVA] 모음 제거 (0) | 2023.01.24 |
[JAVA] 소인수분해(feat. Integer[ ] -> int[ ] / int[ ] -> Integer[ ]) (0) | 2023.01.24 |
[JAVA] 문자열 정렬하기(1) (0) | 2023.01.24 |
[JAVA] 팩토리얼 (0) | 2023.01.23 |