[이코테] Chap12 문자열 재정렬

guriiiiiii·2022년 1월 22일
0

알파벳 대문자와 숫자(0~9)로 구성된 문자열이 주어질 때
모든 알파벳을 오름차순으로 정렬하여 출력한 뒤 모든 숫자를 더한값을 이어서 출력하는 문제

💡 나의 풀이
반복문을 돌며 문자별로 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;
profile
n-1년차 개발자

0개의 댓글