💡 나의 풀이
반복문을 돌며 문자별로 hashcode가 65(A)보다 작으면 숫자이므로 더해주고, 65이상이면 새로운 배열에 넣어준 뒤 정렬한다
// 모든 글자를 뜯어서 arraylist에 담는다. 이 때 문자열 정렬을 진행
String[] strArr = Arrays.stream(str.split("")).sorted().toArray(String[]::new)
// 문자 정렬을 위한 arraylist선언
ArrayList<String> temp = new ArrayList<>();
// 숫자의 합계를 저장할 변수
int sum = 0;
// 배열을 순회하면서 아스키코드가 65보다 작으면 즉, 숫자면 합계를 계산 & 문자인경우 새로운 배열에 담는다
for(String s : strArr){
if(s.hashCode() < 65){
sum+= Integer.parseInt(s);
continue;
}
temp.add(s);
}
// 문자열 배열을 string으로 변환
for(String s : temp){
result += s;
}
// 가장 뒤에 모든 숫자의 합계를 더해준 뒤 return한다
result+=sum;
💡책의 풀이
Character의 isLetter 함수를 이용하여 문자인지 여부를 체크하는 방법을 사용한다
String result = "";
// Collections.sort를 사용하기위해 arraylist를 생성해준다
ArrayList<Character> arr = new ArrayList<>();
int value = 0;
for(int index = 0; index <str.length(); index++){
// Character.isLetter와 str.charAt함수로 index번째에 해당하는 문자가 문자인지, 숫자인지 체크할수있다
if(Character.isLetter(str.charAt(index))){
arr.add(str.charAt(index));
}else{
// '0'을 뺴주는 이유 => '1'은 아스키코드로 49, '0'은 48이다
// 따라서 '0'을 뺌으로서 아스키코드로 연산했을때 정수형이 나올수 있도록 한다
value += str.charAt(index)- '0';
}
}
Collections.sort(arr);
for(Character c : arr) result += c;
if(value != 0) result+= value;