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);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 10989번 - 수 정렬하기 3 (Java 8) (0) | 2022.03.03 |
---|---|
백준 2751번 - 수 정렬하기 2 (Java 8) (0) | 2022.03.02 |
백준 1436번 - 영화감독 숌 (Java 8) (0) | 2022.03.01 |
백준 1018번 - 체스판 다시 칠하기 (Java 8) (0) | 2022.03.01 |
백준 7568 - 덩치 (Java 8) (0) | 2022.02.28 |
댓글