문제
- 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 위에 모든 숫자를 더한 값을 이어서 출력합니다.
입력 -> 출력
K1KA5CB7 -> ABCKK13
AJKDLSI412K4JSJ9D -> ADDIJJJKKLSS20
문제해결
1) 내 풀이
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int size = input.length();
char[] arr = new char[size];//알파벳만 꺼내서 담기
int num = 0;//숫자만 꺼내서 담기
for(int i=0;i<size;i++) {
char tmp = input.charAt(i);
if(tmp>=65 && tmp<=90) //알파벳이라면
arr[i] = tmp;
else //숫자라면
num += (tmp-'0');
}
Arrays.sort(arr);//알바벳 정렬
String result = new String(arr).trim();//공백 제거 후 String으로
System.out.println(result+num);
}
2) 정답
public static String str;
public static ArrayList<Character> result = new ArrayList<Character>();
public static int value = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
str = sc.next();
// 문자를 하나씩 확인하며
for (int i = 0; i < str.length(); i++) {
// 알파벳인 경우 결과 리스트에 삽입
if (Character.isLetter(str.charAt(i))) {
result.add(str.charAt(i));
}
// 숫자는 따로 더하기
else {
value += str.charAt(i) - '0';
}
}
// 알파벳을 오름차순으로 정렬
Collections.sort(result);
// 알파벳을 차례대로 출력
for (int i = 0; i < result.size(); i++) {
System.out.print(result.get(i));
}
// 숫자가 하나라도 존재하는 경우 가장 뒤에 출력
if (value != 0) System.out.print(value);
System.out.println();
}
- 알파벳은 알파벳끼리, 숫자는 숫자끼리 모아서 정렬 후 출력하면 된다
- 나는 char배열을 사용했고 풀이에서는 ArrayList<Character>를 사용했다
'[알고리즘] > 이코테' 카테고리의 다른 글
다이나믹 프로그래밍 - 개미전사 (0) | 2021.07.12 |
---|---|
다이나믹 프로그래밍 - 피보나치 수열 (0) | 2021.07.11 |
구현 - 왕실의 나이트 (0) | 2021.02.23 |
구현 - 시각 (0) | 2021.02.20 |
구현 - 상하좌우 (0) | 2021.02.19 |