문제
내가 작성한 오답
: 연속된 수는 하나의 숫자로 간주합니다. → 전제를 확인하지 못했다.
class Solution {
public int solution(String my_string) {
int answer = 0;
for(char c : my_string.toCharArray()){
if(Character.isDigit(c)){
answer += (int)(c-48);
}
}
return answer;
}
}

import java.util.*;
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] nums = my_string.replaceAll("[^\\d]+",",").split(",");
for(String num :nums){
answer += Integer.parseInt(num);
}
return (int)answer;
}
}
내가 작성한 정답
import java.util.*;
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] nums = my_string.replaceAll("[^\\d]+",",").split(",");
for(String num :nums){
if(num.isEmpty()){
continue;
}
answer += Integer.parseInt(num);
}
return answer;
}
}
정규식
\\d : 숫자
^ : 아님
+ : 하나이상 반복되는 패턴
→ [^\\d]+ : 숫자가 아닌 하나이상 반복되는 패턴이면 ,로 대체해라
정규식 | 설명 | 예제 |
\\d+ | 숫자로 이루어진 부분을 찾음 | "abc123de45" → ["123", "45"] |
[^a-zA-Z]+ | 알파벳이 아닌 문자 기준으로 split | "abc123de45" → ["abc", "de"] |
\\s+ | 공백(스페이스, 탭, 개행 등) 기준으로 split | "Hello World" → ["Hello", "World"] |
// 정규식을 이용하면 그냥 쪼갤 때 문자로 쪼개면 되기 때문에 replaceAll을 사용할 필요가 없음
import java.util.*;
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] nums = my_string.split("[^\\d]+");
for(String num :nums){
if(num.isEmpty()){
continue;
}
answer += Integer.parseInt(num);
}
return answer;
}
}
다른 사람들의 정답
class Solution {
public int solution(String my_string) {
int answer = 0;
String[] str = my_string.replaceAll("[a-zA-Z]", " ").split(" ");
for(String s : str){
if(!s.equals("")) answer += Integer.valueOf(s);
}
return answer;
}
}
Integer.valueOf() vs Integer.parseInt()
구분 | Integer.valueOf(String s) | Integer.parseInt(String s) |
반환 타입 | Integer 객체 | int 기본형 |
메모리 사용 | 객체(오토박싱 시 성능 저하 가능) | 기본형(더 가벼움) |
캐싱 여부 | ✅ (-128 ~ 127 범위 캐싱) | ❌ (항상 새로운 값) |
성능 | 객체 캐싱 덕분에 가벼울 수도 있음 | 무조건 가볍고 빠름 |
사용 예 | Integer obj = Integer.valueOf("123"); | int num = Integer.parseInt("123"); |
Share article