알고리즘/백준(BAEKJOON)

[JAVA] 백준 2750 수 정렬하기

jojelly 2021. 10. 12. 00:35
반응형

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

 

2750번: 수 정렬하기

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

www.acmicpc.net

두가지 방법으로 나누어 풀어보았다.

1. 버블정렬

2. 메소드 이용하기

1.[버블정렬]

첫 번째 인덱스부터 시작하여 뒤의 인덱스들의 값들과 비교하여 최솟값들을 차곡차곡 쌓아나가는 방법이다.

나는 BufferReader를 이용하여 값을 받았다.

첫 줄의는 숫자의 갯수가 들어오기떄문에 들어온 값을 Integer.ParseInt해준다.

이후 배열을 다음 숫자들의 값을 받아줄 배열을 받아주며 길이는 첫줄의 숫자로 지정한다.

1
2
3
4
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
cs

for문을 이용해 숫자의 값을 받아준다.

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

이제 버블정렬을 이용해 인덱스를 정렬해주자 이중 for문을 이용해준다.

  • arr[0]의 값과 이후의 arr[1]값을비교해준다.if문을 통해 arr[0]의 값이 큰 경우 두 값을 변경해준다.
  • 이후 다시 arr[0]의 값과 arr[2]의 값 비교, arr[0]과 arr[3]의 값 비교 등 N개의 배열의 길이 만큼 돌면서 배열의 수 중 arr[0]에 가장 작은 값이 들어가도록 한다.
  • 이후 arr[1]의 값과 arr[2]비교, arr[1]와 arr[3]비교하는식으로 돌린다고 생각하면된다.
  • 이렇게 되면 마지막 수는 자동으로 가장 큰 수가 들어가기 때문에 겉에 있는 for문은 N-1까지 반복하면 된다.
1
2
3
4
5
6
7
8
9
        for (int i = 0; i< N-1; i++){   //첫인덱스부터  끝인덱스 -1인덱스까지 비교
            for (int j = i+1; j<N; j++){    //arr[i]인덱스와 그 뒤의 인덱스들을 크기비교하여 교환
                if (arr[i]>arr[j]){
                    int hi = arr[i];
                    arr[i] = arr[j];
                    arr[j]= hi;
                }
            }
        }
cs

 

 

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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&lt;N; i++){
            arr[i] = Integer.parseInt(br.readLine());
        }
 
        for (int i = 0; i&lt; N-1; i++){   //첫인덱스부터  끝인덱스 -1인덱스까지 비교
            for (int j = i+1; j&lt;N; j++){    //arr[i]인덱스와 그 뒤의 인덱스들을 크기비교하여 교환
                if (arr[i]&gt;arr[j]){
                    int hi = arr[i];
                    arr[i] = arr[j];
                    arr[j]= hi;
                }
            }
        }
 
        for (int val: arr){
            System.out.println(val);
        }
    }
}
cs

 

2.[메소드 활용]

Arrays.sort메소드를 사용한다. 또한 이번에는 Bufferreader대신 Scanner를 사용해봤다.

Arrays.sort 메소드는 자바에서 기본적으로 제공해주는 정렬 메소드다. Arrays 패키지만 import 해준 뒤 sort 메소드를 사용하면 된다.오름차순으로 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        int N = sc.nextInt();
        int [] arr = new int [N];
        for (int i = 0; i< N; i++) {
            arr[i] = sc.nextInt();
        }
 
        Arrays.sort(arr);
 
        for (int i = 0; i<N; i++){
            System.out.println(arr[i]);
        }
 
    }
}
cs
반응형