Algorithm ( 알고리즘 )

백준 2750번 문제 ( 정렬하기 )

비뀨_ 2021. 10. 17. 23:29

문제는 직접 가서 보는것이 예의 'ㅅ' 

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

 

맨 처음에는 내가 학원 처음 다니면서 배웠던 Scanner 를 사용해서 문제를 풀었다. ( 사실 이게 익숙해서 ) 

package sort;

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

public class B_2750 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		Scanner sc = new Scanner(System.in));

		int n = sc.nextInt();
		int arr[] = new int[n];

		for (int i = 0; i < n; i++) {
			int num = sc.nextInt();
			arr[i] =  num;
		}
		sc.close();
		for (int i = 0; i < n; i++) {
			for (int j = i; j > 0; j--) {
				int arrJ = arr[j];
				int arrJpre = arr[j-1];
				if (arrJ < arrJpre ) {
					arr[j] = arrJpre;
					arr[j-1] = arrJ;
				}else {
					break;
				}

			}
		}
		for(int a : arr) {
			System.out.println(a);
		}
	}
}

 

문제 자체에  중복이 없다고 해놔서 중복제거 코드는 사용하지 않았고,

그냥 Arrays.sort() 를 사용할까 생각했지만 , 문제 푸는 것 자체가 구현에 목적을 두고 있기 때문에 하지 않았다.

그래서 맨 처음에는 ArrayList로 풀려고 했지만,  삽입 & 수정이 너무 메모리랑 시간을 잡아먹을 것 같아서 + 어려워서 포기했다.

 

그래서 그냥 기본으로 int 배열로 문제를 풀었다. 

정렬 중에서 뭘 쓸까 고민했는데 , 삽입정렬이 좀 빠르다고 들어서

( 물론 다른 여러정렬이 있지만 내 수준에서는 버블 , 선택 ,삽입이 이해가 되어있는 상태라 선택지는 3개 ) 

삽입으로 구현 해 봤다.

 

결과는

망했다. 맞긴 했는데 ,  시간이 너무 오래걸린 것 같다.

그래서 여러가지 생각해봤다가 BufferedReader로 썼는데 

 

시간이랑 속도가 혁명적으로 줄어들었다. ( 코드는 늘어났지만 )

 

그래서 결론은 Scanner 대신 BufferedReader를 사용해야겠다는 것. 

package sort;

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

public class B_2750 {
	public static void main(String[] args) throws NumberFormatException, 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++) {
			int num = Integer.parseInt(br.readLine());
			arr[i] =  num;
		}
		br.close();
		for (int i = 0; i < n; i++) {
			for (int j = i; j > 0; j--) {
				int arrJ = arr[j];
				int arrJpre = arr[j-1];
				if (arrJ < arrJpre ) {
					arr[j] = arrJpre;
					arr[j-1] = arrJ;
				}else {
					break;
				}

			}
		}
		for(int a : arr) {
			System.out.println(a);
		}
	}
}

'Algorithm ( 알고리즘 )' 카테고리의 다른 글

이분검색(Binary Search) - Java구현  (0) 2023.02.19