Algorithm

[Algorithm] 문자열 재정렬

씬프 2021. 6. 4. 10:47
반응형

문제

알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬해 이어서 출력한 뒤, 모든 숫자를 더한 값을 이어서 출력한다.

 

입력 조건

첫째 줄에 문자열 S가 주어진다.

 

출력 조건

첫째 줄에 요구하는 정답을 출력한다.

 

풀이

1. 문자열을 입력받는다.

2. 문자열에 문자 하나하나 씩 숫자인지 문자인지 판별한다. 숫자면 sum이라는 정수형에 합으로 저장하고, 문자는 List를 정의해 저장한다. 

3. 문자가 담긴 리스트를 정렬한다.

4. 결과를 담을 result에 문자를 하나씩 더한다. 그리고 마지막에 sum을 문자열로 변환해 더한다.

import java.util.*;

class Main {

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

    List<Character> list = new ArrayList<>();
    int sum = 0;
    for (int i = 0; i < str.length(); i++) {
      int tmp = str.charAt(i) - '0';
      if (tmp >= 0 && tmp <= 9) {
        sum += tmp;
      } else {
        list.add(str.charAt(i));
      }
    }

    Collections.sort(list);
    
    String result = "";
    for (char i : list) {
      result += i;
    }
    result += String.valueOf(sum);

    System.out.println(result);
  } // end main
}

문제점. 여기서 sum = 0;으로 초기화 했는데, 만약 문자열에 숫자가 없는 경우 끝에 0이 더해지는 문제가 발생한다.

sum을 문자열에 더하는 것에 조건문으로 sum != 0 조건을 부여한다.

import java.util.*;

class Main {

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

    List<Character> list = new ArrayList<>();
    int sum = 0;
    for (int i = 0; i < str.length(); i++) {
      int tmp = str.charAt(i) - '0';
      if (tmp >= 0 && tmp <= 9) {
        sum += tmp;
      } else {
        list.add(str.charAt(i));
      }
    }

    Collections.sort(list);
    
    String result = "";
    for (char i : list) {
      result += i;
    }
    // sum에 조건문 부여
    if (sum != 0) {
      result += String.valueOf(sum);
    }
    
    System.out.println(result);
  } // end main
}

'Algorithm' 카테고리의 다른 글

[Algorithm] 문자열 압축  (0) 2021.06.06
[Algorithm] 자물쇠와 열쇠  (0) 2021.06.05
[Algorithm] 무지의 먹방 라이브  (0) 2021.06.03
[Algorithm] 럭키 스트레이트  (0) 2021.06.03
[Algorithm] 볼링공 고르기  (0) 2021.06.02