개발자일걸요..?

2750번 수 정렬하기 본문

알고리즘코딩/Baekjoon Online Judge

2750번 수 정렬하기

Re_A 2021. 2. 2. 09:26
728x90
반응형

문제 링크 : www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

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

www.acmicpc.net

 방법 1. 삽입정렬(insertion sort)

삽입 정렬 : 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는알고리즘.

  -> 장점 : 구현이 간단함, 같은 O(n^2)알고리즘에 비교하여 빠름, 안정적/in-place 알고리즘이다.

      단점 : 배열이 길어질 수록 효율이 떨어짐

내용 출처 : ko.wikipedia.org/wiki/%EC%82%BD%EC%9E%85_%EC%A0%95%EB%A0%AC

 

삽입 정렬 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 삽입 정렬(揷入整列, insertion sort)은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬

ko.wikipedia.org

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int T = 0;
	cin >> T;

	vector<int> list;
	
	while (T--) {
		int n = 0;
		cin >> n;
		if (list.size() == 0) list.push_back(n);
		else if (list.size() == 1) {
			if (list[0] > n) list.insert(list.begin(), n); 
			else list.push_back(n);
		}
		else {
			for (unsigned int i = 0; i < list.size(); i++) {
				if (list[i] >= n) {
					list.insert(list.begin() + i, n);
					break;
				}
				else if (list[i]<n && i==list.size()-1) {
					list.push_back(n);
					break;
				}
			}
		}
	}
	for (int i = 0; i < list.size(); i++) {
		cout << list[i] << "\n";
	}
	return 0;
}

(위의 코드)문제번호/정답여부/사용된 메모리와 시간/사용언어/코드길이

방법 2. 버블정렬(Bubble sort) = 거품정렬

  버블정렬 : 두 인접한 원소를 검사형 정렬하는 방법.(양 방향에서 진행하면 칵테일정렬)

    장점: 코드가 단순       단점 : 시간이 오래걸림(O(n^2))

내용 출처 : ko.wikipedia.org/wiki/%EA%B1%B0%ED%92%88_%EC%A0%95%EB%A0%AC

 

거품 정렬 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 무작위 배열수의 거품 정렬 예 거품 정렬( - 整列, 영어: bubble sort, sinking sort)은 두 인접한 원소를 검사하여 정렬하는 방법이다. 시간 복잡도가 O ( n 2 ) {\displaystyl

ko.wikipedia.org

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int T = 0;
	cin >> T;

	vector<int> list;

	while (T--) {
		int n = 0;
		cin >> n;
		list.push_back(n);
		for (int i = 0; i < list.size(); i++) {
			for (int j = i; j < list.size(); j++) {
				if (list[j] < list[i]) {
					int temp = list[j];
					list[j] = list[i];
					list[i] = temp;
				}
			}
		}
	}

	for (int i = 0; i < list.size(); i++) {
		cout << list[i] << "\n";
	}
	return 0;
}

(위의 코드)문제번호/정답여부/사용된 메모리와 시간/사용언어/코드길이

반응형

'알고리즘코딩 > Baekjoon Online Judge' 카테고리의 다른 글

2108번 통계학  (0) 2021.02.03
10989번 수 정렬하기 3  (0) 2021.02.03
1018번 체스판 다시 칠하기  (0) 2021.02.02
7568번 덩치  (0) 2021.02.01
1436번 영화 감독 숌  (0) 2021.02.01
Comments