포스트

[이코테/JAVA] 이코테 - 문자열 재정렬

문자열 재정렬

문제

  • 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.
  • 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다.

풀이

  • 해당 문자열을 반복문을 사용하여 알파벳과 숫자를 분리한다.
    • 이 과정에서 숫자는 합산한다.

코드

첫 번째 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        // 문자열에서 알파벳만 넣을 리스트 생성
        List<String> alphabet = new ArrayList<>();

        // 문자열에서 숫자들 더한 값을 더함
        int sum = 0;

        // 문자열의 길이만큼 반복
        for (int i = 0; i < str.length(); i++) {
            // 해당 문자가 알파벳일 경우 알파벳 리스트에 추가
            if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') {
                alphabet.add(str.charAt(i) + "");
            } else {
                // 숫자일 경우 합산
                sum += str.charAt(i) - '0';
            }
        }
        // 알파벳순으로 정렬
        alphabet.sort(String::compareTo);

        // 알파벳을 문자열로 수정
        String result = String.join("", alphabet);

        // 알파벳 + 합값을 반환
        System.out.println(result + sum);
    }
}

두 번째 코드

첫 번째 코드에서 비효율적인 부분이 있는 것 같아 수정을 해봤다.

  • 수정 부분
    • List 대신 StringBuilder이나 StringBuffer를 사용하여 append 하는 것이 반복적으로 문자열을 추가할 때 더 효율적인 것 같아 수정
    • char를 직접 비교하는 것 보다 Java의 내장 메서드인 Character.isLetter()Character.isDigit()을 사용하여 더 명확하도록 수정
    • 알파벳을 정렬하기 위해 char[] 배열을 사용.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();

        // 알파벳을 저장할 StringBuilder 사용
        StringBuilder alphabet = new StringBuilder();

        // 숫자의 합을 저장할 변수
        int sum = 0;

        // 문자열의 길이만큼 반복
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            // 해당 문자가 알파벳일 경우 StringBuilder에 추가
            if (Character.isLetter(ch)) {
                alphabet.append(ch);
            } else if (Character.isDigit(ch)) {
                // 숫자일 경우 합산
                sum += ch - '0';
            }
        }

        // 알파벳을 정렬 (StringBuilder는 List가 아니므로 문자 배열로 변환 후 정렬)
        char[] alphabetArr = alphabet.toString().toCharArray();
        Arrays.sort(alphabetArr);

        // 결과 출력 (알파벳 정렬 후 숫자 합을 더함)
        System.out.println(new String(alphabetArr) + sum);
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.