[알고리즘문제풀기] 숨어있는 숫자의 덧셈 (2)

silver's avatar
Jan 11, 2025
[알고리즘문제풀기] 숨어있는 숫자의 덧셈 (2)

문제

내가 작성한 오답

: 연속된 수는 하나의 숫자로 간주합니다. → 전제를 확인하지 못했다.
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; } }
notion image
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

silver