클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.
2. 문자열 my_string을 매개변수로 하는 solution 메소드를 선언합니다.
solution은 정수를 반환하므로 데이터타입을 int으로 합니다.
● public int solution(String my_string) {
3. 모든 값을 더한 것을 정수 sum으로 정의하고, 0으로 초기화 시킵니다.
Stringbuilder를 이용하여 가변문자객체 number를 생성해줍니다.
● int sum = 0; StringBuilder number = new StringBuilder();
4.for문을 통해 my_string 문자열을 순회합니다.
c 문자는 my_string의 i번째 입니다.
이 c가 자연수인지 아니면 알파벳인지를 구분하여 더할지 안더할지를 결정하게 됩니다.
● for (int i = 0; i < my_string.length(); i++) { char c = my_string.charAt(i);
5. c가 숫자인지 아닌지는 Character 클래스의 정적메소드 isDigit을 이용해줍니다.
if구문을 이용하여 c가 숫자일 경우, number에 c를 더해줍니다.
그렇지 않을 경우(문자가 나타났을 경우),
number의 길이가 0보다 길다면, number를 문자열로 형변환 후, 정수로 변환하여 sum에 더해줍니다.
그런 다음, number를 0으로 초기화시킵니다.
● if (Character.isDigit(c)) { number.append(c); } else { if (number.length() > 0) { sum += Integer.parseInt(number.toString()); number.setLength(0); } } }
5. 그리고 모든 for문 순회가 끝났는데 number가 남아있을 수 있습니다. (my_string의 마지막 문자가 숫자일 경우)
그 경우를 대비하여 sum에 number를 더해주는 작업을 마지막에 또 해줍니다.
최종적으로 sum을 return해줍니다.
● if (number.length() > 0) { sum += Integer.parseInt(number.toString()); }
return sum; }
}
4) 코드
public class Solution {
public int solution(String my_string) {
int sum = 0;
StringBuilder number = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (Character.isDigit(c)) {
number.append(c);
} else {
if (number.length() > 0) {
sum += Integer.parseInt(number.toString());
number.setLength(0);
}
}
}
if (number.length() > 0) {
sum += Integer.parseInt(number.toString());
}
return sum;
}
}
5) 느낀점
가변객체 StringBuilder를 이용했는데 불변객체 String을 이용한다면 코드가 어떻게 바뀔까.
라는 생각에 코드를 짜봤습니다.
public class Solution {
public int solution(String my_string) {
int sum = 0;
String number = "";
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if (Character.isDigit(c)) {
number += c;
// 문자열을 추가할 때마다 새로운 객체 생성
} else {
if (!number.isEmpty()) {
sum += Integer.parseInt(number);
number = "";
// 새로운 문자열 객체 생성
}
}
}
if (!number.isEmpty()) {
sum += Integer.parseInt(number);
}
return sum;
}
}
String을 이용한다면,
문자열을 변경 및 추가할 때마다 새로운 객체를 생성하기 때문에 성능 및 메모리 저하를 일으킬 수 있습니다.