[알고리즘]/이코테

구현 - 문자열 재정렬

broship 2021. 2. 24. 13:17

문제


- 알파벳 대문자와 숫자(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