728x90
반응형
[백준 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 |
모든 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 |
728x90
반응형
'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 |