본문 바로가기
알고리즘/백준

백준 2750번 : 수 정렬하기 (Java 8)

by latissimus 2022. 3. 2.

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

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

설명대로 시간복잡도 허들이 낮은 편인 정렬을 사용해서 풀어봤다. 버블정렬, 삽입정렬, 선택정렬 세 가지로 풀어보았다. Arrays.sort를 사용해도 통과된다.

 

 

버블정렬

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

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];

        for(int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        // Bubble sort
        for(int i = 0; i < arr.length; i++) {
            int idx = -1;
            for(int j = 0 ; j < arr.length - i - 1 ; j++) {
                if(arr[j] > arr[j+1]) {
                    int temp = arr[j+1];
                    arr[j+1] = arr[j];
                    arr[j] = temp;
                }
            }
            if(idx ==0)break;
        }
        StringBuilder sb = new StringBuilder();
        for(int each : arr){
            sb.append(each).append("\n");
        }
        System.out.print(sb);

    }
}

 참고 : 자바 공작소 버블정렬 구현

 

버블정렬 버블소트 BubleSort 자바구현

버블정렬 버블소트 BubleSort 자바구현 JAVA 로 구현한 버블정렬 소스 배열을 순차탐색하여 i, i+1번째 요소를 비교하여 큰 것을 뒤로 이동 위 과정이 1번 처리되는 경우 가장 큰 수가 배열 마지막에

javaplant.tistory.com

버블정렬 첫 phase후 마지막 요소는 정렬에서 배제해도 된다는 사실을 이 글을보고 새삼 알았다. 탈출조건을 넣어주니 속도가 조금 올랐다.

 

 

 

삽입 정렬

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));
        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        for(int i=0; i<N; i++){
            arr[i] = Integer.parseInt(br.readLine());
        }
        //Insert sort
        for(int i=1; i<N; i++){
            for(int j=i; j>0; j--){
                if(arr[j] < arr[j-1]){
                    int tmp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = tmp;
                }
            }
        }
        StringBuilder sb = new StringBuilder();
        for(int each : arr){
            sb.append(each).append("\n");
        }
        System.out.print(sb);
    }
}

참고 : st님 삽입정렬

 

자바 [JAVA] - 삽입 정렬 (Insertion Sort)

[정렬 알고리즘 모음] 더보기 1. 계수 정렬 (Counting Sort) 2. 선택 정렬 (Selection Sort) 3. 삽입 정렬 (Insertion Sort) - [현재 페이지] 4. 거품 정렬 (Bubble Sort) 5. 셸 정렬 (Shell Sort) 6. 힙 정렬 (He..

st-lab.tistory.com

st님 방식이 효율이 더 좋다. 필요한 부분만 바꾼다.

 

 

 

선택 정렬

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
	public static void main(String[] args) throws IOException {
    
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringBuilder sb = new StringBuilder();
        
		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];
		
		for(int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(br.readLine());
		}
 
		// Select sort
		for(int i = 0; i < N - 1; i++) {
			for(int j = i + 1; j < N; j++) {
				if(arr[i] > arr[j]) {
					int temp = arr[j];
					arr[j] = arr[i];
					arr[i] = temp;
				}
			}
		}
		
		for(int each : arr) {
			sb.append(each).append('\n');
		}
		System.out.println(sb);
	}
}

 

 

댓글