[백준] 1427번

박채은·2023년 4월 30일
0

코딩테스트

목록 보기
27/52

문제

문제 풀이

문제를 읽고 든 생각은 그냥 입력값을 내림차순으로 정렬한 다음에 출력하면 되는 문제 아니야? Arrays.sort() 사용해야지~라고 생각했다.

하지만 Arrays.sort(arr, Comparator.reverseOrder());를 사용하는 경우, 기본 타입 배열은 래퍼클래스로 만들어야 한다.

그래서 두 가지 방법을 생각했다.

  1. String을 입력받아, Character 배열이나 String 배열로 만든 다음에 Arrays.sort()를 사용하자.
  2. Arrays.sort()를 사용하지 않고, 버블 정렬이나 선택 정렬을 사용하자.

방법 1

  • String 배열로 만든 다음에 정렬했다.
import java.io.*;
import java.util.*;

public class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int len = s.length();
        
        // 1. 입력받은 s를 배열로 변환
        String[] strs = new String[len];
        for(int i=0;i<len;i++){
            strs[i] = String.valueOf(s.charAt(i));
        }
        
        // 2. 내림차순으로 배열 정렬
        Arrays.sort(strs, Comparator.reverseOrder());
        
        // 3. 배열 출력
        for(int i=0;i< len;i++){
            System.out.print(strs[i]);
        }
    }
}

  • s.charAt(i)
    • s.charAt(i)를 하면 char 타입이기 때문에 String.valueOf()를 사용해서 String 타입으로 변경해주었다.
import java.io.*;
import java.util.*;

public class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int len = s.length();
        
        // 1. 입력받은 s를 배열로 변환
        String[] strs = s.split("");
        
        // 2. 내림차순으로 배열 정렬
        Arrays.sort(strs, Comparator.reverseOrder());
        
        // 3. 배열 출력
        for(int i=0;i< len;i++){
            System.out.print(strs[i]);
        }
    }
}

  • (1번) 단계에서 for문 대신에 s.split("")을 사용했다.

방법 2

  • 이번 주 스터디 주제에 선택 정렬이 있기 때문에 선택 정렬으로 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{
    public static void main(String args[]) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int len = s.length();

        // 1. 입력받은 string을 int[] 배열로 변환
        int n = s.length();
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = s.charAt(i) - '0';
        }

        int maxIndex = 0;
        int tmp;

        // 2. 내림차순으로 배열 정렬 - 선택정렬
        for(int i=0;i< n-1;i++){
            maxIndex = i;
            for(int j=i+1;j< n;j++){
                if(arr[maxIndex] < arr[j]){
                    maxIndex = j;
                }
            }
            // swap
            tmp = arr[maxIndex];
            arr[maxIndex] = arr[i];
            arr[i] = tmp;
        }

        // 3. 배열 출력
        for(int i=0;i< len;i++){
            System.out.print(arr[i]);
        }
    }
}

다른 방법

  • 블로그처럼 Arrays.sort()만 하고 뒤에서부터 for문을 도는 방법도 좋은 것 같다. 굳이 기본 타입의 배열을 래퍼클래스로 변환할 필요가 없기 때문에

0개의 댓글