Algorithm/백준(BOJ)

[백준 2750] 수 정렬하기

반응형

[백준 2750] 수 정렬하기


문제 출처 - https://www.acmicpc.net/problem/2750





문제


N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.




입력


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



출력


첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.




예제 입력


1
2
3
4
5
6
5
5
2
3
4
1
cs

예제 출력

1
2
3
4
5
1
2
3
4
5
cs


  • 문제 이해하기
첫째 줄에 원하는 수를 입력하고, 다음 줄부터 해당 수만큼 입력한 뒤 오름차순으로 정렬하는 문제다. 수는 1 이상 1000 이하여야 한다.


  • 계획 및 문제해결
원하는 수를 N이라고 선언하고, 입력받은 후 N번 for문을 돌려서 배열 값에 저장, 그리고 저장된 배열 값들을 비교해서 작은 것부터 차례대로 출력하도록 만들어야 한다.

원하는 수 N을 입력받고, 그만큼 arr배열에 값을 저장시키도록 만들어보자.

1
2
3
4
5
6
7
8
9
10
int N; 
// 원하는 수 저장할 변수 선언
int arr[1001]; 
// 1000개를 저장할 수 있는 배열 선언
 
cin >> N;
 
for(int i = 0; i < N; i++){
    cin >> arr[i];
}
cs

i가 N번 반복하면서, 내가 입력한 수들이 arr배열에 저장되었을 것이다.

이제 저장된 arr배열끼리 모두 비교하면서, 가장 작은 것부터 출력해야 한다.



arr[0]과 나머지 배열 모두를 비교한다. 만약 arr[0]보다 작은 값이 있으면, arr[0]값과 해당 위치 배열의 값을 바꿔서 저장시킨다. 이러면 기존의 arr[0]의 값은 가장 작은 값이 있던 배열로 이동하고, 배열의 맨 처음은 현재 저장된 값 중에 가장 작은 수가 될 것이다.

즉, arr[i]와 arr[i+1]을 가장 마지막 값까지 비교해 나가야 한다.

for문 속에 for문을 이용하자.

마지막 비교는 arr[N-1]과 arr[N]의 비교일 것이다. (지금 우리는 배열을 0부터 시작하기 때문에 정확하게 말하면 N-2와 N-1의 비교다)

1
2
3
4
5
6
for (int i = 0; i < N - 1; i++) {
    for (int j = i + 1; j < N; j++) {
        
    }
}
cs

for문 안에서는, arr[j]의 값이, arr[i]보다 작게 될 때마다 두 값을 swap해줘야 한다. 따라서 for문 안의 내용은 아래와 같이 작성할 수 있다.


1
2
3
4
5
if (arr[j] < arr[i]) {
    int tmp = arr[j];
    arr[j] = arr[i];
    arr[i] = tmp;
}
cs
swap을 통해 arr[j]와 arr[i] 값을 바꿔줄 수 있다.



모든 for문이 진행되면, 이제 arr배열은 0부터 N-1까지 오름차순으로 값이 저장되어 있다. 따라서 arr배열을 출력만 해주면 끝난다.


1
2
3
for (int i = 0; i < N; i++) {
    cout << arr[i] << endl;
}
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int N;
    int arr[1001];
 
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }
 
    for (int i = 0; i < N - 1; i++) {
        for (int j = i + 1; j < N; j++) {
            if (arr[j] < arr[i]) {
                int tmp = arr[j];
                arr[j] = arr[i];
                arr[i] = tmp;
            }
        }
    }
 
    for (int i = 0; i < N; i++) {
        cout << arr[i] << endl;
    }
 
    return 0;
}
cs


반응형

'Algorithm > 백준(BOJ)' 카테고리의 다른 글

[백준 11441] 합 구하기  (0) 2018.04.05
[백준 2292] 벌집  (0) 2018.04.02
[백준 2438] 별찍기 - 1  (0) 2018.03.31
[백준 1912] 연속합  (0) 2018.03.28
[백준 1149] RGB 거리 문제  (0) 2018.03.26