[이코테/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 라이센스를 따릅니다.