HOONDOC

[백준]1427 소트인사이드 - 자바/Java 본문

문제 풀이/BAEKJOON

[백준]1427 소트인사이드 - 자바/Java

HOONDOC 2023. 1. 2. 18:23

1427번: 소트인사이드

🌱풀이

알고리즘

  1. 선택 정렬 알고리즘이다.
  2. 해당 루프에서 탐색할 배열 내 최댓값의 값을 찾는다.
  3. Swap을 통해 차례대로 앞쪽에 배정해준다.

메모리 : 11492KB, 시간 : 80ms

package book_algoTEst;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_1427 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		String numberOrigin = br.readLine();
		int[] number = new int[numberOrigin.length()];
		for(int i = 0; i<number.length; i++) number[i] = numberOrigin.charAt(i) - '0';
		
		for(int i = 0; i<number.length; i++) {
			int Max = i; // 해당 루프에서 최댓값이 위치할 인덱스
			for(int j = i+1; j<number.length; j++) { //최댓값 찾기
				if(number[j] > number[Max]) Max = j;
			}
			if(number[i] < number[Max]) { // 최댓값이 있다면 Swap
				int tmp = number[i];
				number[i] = number[Max];
				number[Max] = tmp;
			}
		}
		for(int i = 0; i<number.length; i++) sb.append(number[i]);
		System.out.print(sb.toString());
		br.close();
	}
}

🪴코드 리뷰

알고리즘은 동일하지만 사용한 자료 구조가 다르다. ArrayList를 연습하려고 한 것 같다. Collection에는 배열 내 최댓값을 찾아주는 Collections.max() 메소드가 있고, List 자료구조는 리스트 내 값의 삭제와 추가가 자유로우므로 추출한 최댓값을 삭제하면서 출력한 것이다.

알고리즘의 구현에 충실한 것도 좋지만 이미 구현되어있는 자료구조의 내장 메소드를 잘 활용할 줄 아는 것도 중요해보인다.

🌿메모리 : 17632KB, 시간 : 200ms

💡 풀이자 : ehdgus6879

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        String str = sc.next();
        String[] arr = str.split("");
        ArrayList<Integer> list = new ArrayList<Integer>();

        for(int i = 0 ; i < arr.length ; i++){
            list.add(Integer.parseInt(arr[i]));
        }

        for(int i =0; i < arr.length; i++){
            int max = Collections.max(list);
            list.remove((Integer) max);
            sb.append(max);

        }

        System.out.println(sb.toString());

    }
}

Collection에는 내림차순 정렬도 내장 메소드로 구현이 되어있구나. 근데 Collections.reverseOrder()은 반환 값이 뭐길래 Arrays.sort에 인자로 들어갈 수 있는거지?

🌿메모리 : 14272KB, 시간 : 124ms

💡 풀이자 : dudtkd1221

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Integer[] array;
        String s = br.readLine();
        array = new Integer[s.length()];
        for(int i=0; i< s.length(); i++){
            array[i] = Character.getNumericValue(s.charAt(i));
        }
        Arrays.sort(array, Collections.reverseOrder());
        for(Integer i : array){
            System.out.print(i);
        }

    }
}

Conclusion

  • 주말을 활용하여 Array와 Collection에 대해 조사해보기.
  • 고난이도 알고리즘으로 갈수록 다양한 자료구조를 자유롭게 사용할 수 있는 발상의 유연함이 필요하므로, 기본 알고리즘의 구현을 익히고 난 뒤에는 다양한 시도를 해보자.