소트인사이드

이윤설·2024년 2월 8일
0

https://www.acmicpc.net/problem/1427

제출코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = br.readLine();
            char[] charArray = input.toCharArray();
            List<Integer> list = new ArrayList<>();

            for (char c : charArray) {
                int number = Character.getNumericValue(c);
                list.add(number);
            }

            Collections.sort(list, Collections.reverseOrder());

            StringBuilder sb = new StringBuilder();
            for (Integer i : list) {
                sb.append(i);
            }

            System.out.println(sb);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

모범답안1

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
 
public class Main {
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		char[] arr = br.readLine().toCharArray();
 
 
		Arrays.sort(arr);
 
		for (int i = arr.length - 1; i >= 0; i--) {
			System.out.print(arr[i]);
		}
 
	}
}
  • char[]에서 곧바로 정렬할 수 있다!

모범답안2

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        try {
            // BufferedReader를 이용해 입력을 받습니다.
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String input = br.readLine();
            // StringTokenizer를 이용해 입력받은 문자열을 한 글자씩 나눕니다.
            StringTokenizer st = new StringTokenizer(input, "");

            
            List<Integer> list = new ArrayList<>();
            // StringTokenizer가 더 이상 토큰을 가지고 있지 않을 때까지 반복합니다.
            while (st.hasMoreTokens()) {
                // 토큰을 가져와 Integer로 변환한 후 리스트에 추가합니다.
                int number = Integer.parseInt(st.nextToken());
                list.add(number);
            }

            // 리스트를 내림차순으로 정렬합니다.
            Collections.sort(list, Collections.reverseOrder());

            
            StringBuilder sb = new StringBuilder();
            // 리스트의 각 원소를 StringBuilder에 추가합니다.
            for (Integer i : list) {
                sb.append(i);
            }            

        } catch (IOException e) {
            // IOException이 발생하면 스택 트레이스를 출력합니다.
            e.printStackTrace();
        }
    }
}

정리

  • char[]를 sort로 정렬할 수 있다. 자료형이 숫자가 아니라서 일일히 숫자로 바꿔줬는데 곧바로 sort()함수를 쓰면 정렬이 된다.
    char 타입은 유니코드 문자를 표현하며, 내부적으로는 정수 값을 가진다.
    각 문자가 유니코드 표준에 따라 고유의 숫자 값으로 매핑되어 있기 때문이다. 따라서 char 배열을 정렬하면 유니코드 값에 따라 정렬된다.

예를 들어, '1', '2', '3'은 각각 유니코드 값으로 49, 50, 51을 갖는다. 따라서 이를 정렬하면 '1', '2', '3' 순서로 정렬된다.

  • BufferedWriter보다 StringBuilder를 사용하는 것이 더 빠르다.
  • i++ 대신 i--을 작성하면 반대순서로 반복한다. 물론 맨 첫번째 요소도 0이 아니라 길이-1이 되어야 할 것이다~!
		for (int i = arr.length - 1; i >= 0; i--) {
			System.out.print(arr[i]);
		}
profile
화려한 외면이 아닌 단단한 내면

0개의 댓글