[c++] 백준 12단계

알감자·2022년 3월 22일
0

백준알고리즘

목록 보기
12/52

#2750

#include <iostream>
using namespace std;

int main() 
{
	//bubble sort 사용

	int N, temp;
	cin >> N;

	//arr N만큼 동적할당
	int* arr = new int[N];
	
	for (int i = 0; i < N; i++)
		cin >> arr[i];

	for(int i=0; i<N-1; i++)
		for (int j = 1; j < N - i; j++)
		{
			if (arr[j - 1] > arr[j]) //arr[j-1]이 arr[j]보다 크다면 둘이 교환
			{
				temp = arr[j];
				arr[j] = arr[j - 1];
				arr[j - 1] = temp;
			}
		}

	for (int i = 0; i < N; i++)
		cout << arr[i] << "\n";

	delete[] arr;
	return 0;
}

#2751

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

int main() 
{
	int N, temp;
	cin >> N;

	//arr N만큼 동적할당
	int* arr = new int[N];
	
	for (int i = 0; i < N; i++)
		cin >> arr[i];

	sort(arr, arr + N);

	for (int i = 0; i < N; i++)
		cout << arr[i] << "\n";

	delete[] arr;
	return 0;
}

#10989

#include <iostream>
using namespace std;

int main() 
{
	//이 세줄을 넣어줘야지 타임오버 안뜬다..
	ios_base::sync_with_stdio(false); 
	cin.tie(NULL); 
	cout.tie(NULL);

	int N, temp;
	cin >> N;

	int arr[10001] = { 0 };
	
	//입력값을 전부 받아 비교하면 시간초과
	//입력값의 index의 count를 증가시키자

	for (int i = 0; i < N; i++)
	{
		cin >> temp;
		arr[temp]++;
	}
	
	for (int i = 1; i < 10001; i++) //1~10000까지
	{
		for (int j = 0; j < arr[i]; j++) //arr에서 count 된 수만큼 출력하기 위함
		{
			cout << i << "\n";
		}
	}
	return 0;
}

#2108

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> arr;

int main() 
{
	int mean = 0, median, mode, range = 0, max=0, index; //산술평균, 중앙값, 최빈값, 범위
    int count[8001] = { 0 }; // 마이너스 값이 있기 때문에 4000을 더해줘서 범위를 0~8000으로 만든다.
	int N, temp;
	cin >> N;

    for (int i = 0; i < N; i++)
    {
        cin >> temp;
        arr.push_back(temp);
        mean += temp;
        count[temp + 4000]++;
    }

    sort(arr.begin(), arr.end());
    mean = round((double)mean / N);
    median = arr[arr.size() / 2];
    range = arr.back() - arr.front();

    for (int i = 0; i < 8001; i++)
    {
        if (count[i] > max)
        {
            max = count[i];
            index = i; //max가 되는 index 저장
        }
    }

    for (int i = index + 1; i < 8001; i++) //max인 index의 다음부터 다시 검색해서
    {
        if (count[i] == max) //최빈값이 한번 더 있다면
        {
            index = i; //그 값이 두번째로 작은 값이므로 저장해주고 break
            break;
        }
    }

    cout << mean << "\n";
    cout << median << "\n";
    cout << index - 4000 << "\n"; //4000 더해줬으므로 빼주기
    cout << range;

	return 0;
}

#1427

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

bool compare(char a, char b)
{
	return a > b;
}

int main() 
{
	string str;
	cin >> str;

	sort(str.begin(), str.end(), compare);
	
	cout << str;
	
	return 0;
}

#11650

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

int main() 
{
	int N, x, y;
	vector<pair<int,int>> arr;

	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> x >> y;
		arr.push_back({ x,y });
	}

	sort(arr.begin(), arr.end());


	for (int i = 0; i < N; i++)
	{
		cout << arr[i].first << " " << arr[i].second << "\n";
	}

	return 0;
}

#11651

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

bool compare(pair<long, long> a, pair<long, long> b)
{
	if (a.second == b.second)
		return a.first < b.first;
	else
		return a.second < b.second;
}

int main() 
{
	int N, x, y;
	vector<pair<long,long>> arr;

	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> x >> y;
		arr.push_back({ x,y });
	}

	sort(arr.begin(), arr.end(), compare);

	for (int i = 0; i < N; i++)
	{
		cout << arr[i].first << " " << arr[i].second << "\n";
	}

	return 0;
}

#1181

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

bool compare(string a, string b)
{
	if (a.length() == b.length())
	{
		for (int i = 0; i < a.length(); i++)
		{
			if (a[i] != b[i])  //alphabet순 정렬
				return a[i] < b[i];
		}
	}

	return a.length() < b.length();
}

int main() 
{
	int N;
	string str;
	vector<string> arr;
	
	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> str;
		arr.push_back(str);
	}

	sort(arr.begin(), arr.end(), compare);

	for (int i = 0; i < N; i++)
	{
		if (i > 0 && arr[i] == arr[i - 1])
			continue;

		cout << arr[i] << "\n";
	}

	return 0;
}

#10814

#include <iostream>
#include <vector>
#include <string>
#include <utility>
#include <algorithm>
using namespace std;

struct person {
	int index;
	int age;
	string name;
};

bool compare(person a, person b)
{
	if (a.age < b.age)
		return true;
	else if (a.age == b.age)
		return a.index < b.index;
	else
		return false;
}

int main() 
{
	//저장해야 하는 것 : 들어온 순서, 나이, 이름
	//struct 사용해서 풀어보기
	int N;
	cin >> N;
	vector<person> p(N);

	for (int i = 0; i < N; i++)
	{
		cin >> p[i].age >> p[i].name;
		p[i].index = i;
	}

	sort(p.begin(), p.end(), compare);

	for (int i = 0; i < N; i++)
	{
		cout << p[i].age << " " << p[i].name << "\n";
	}

	return 0;
}

#18870

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


int main() 
{
	//Todo
	//input값들을 오름차순으로 정렬
	//중복을 제거하고 index값 리턴
	//들어온 순서대로 index값을 리턴해야하므로 input값을 복사해두기

	vector<int> a, b;
	int temp, N;

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		cin >> temp;
		a.push_back(temp);
		b.push_back(temp);
	}

	sort(a.begin(), a.end());
	a.erase(unique(a.begin(), a.end()), a.end()); //중복되는 값 제거

	for (int i = 0; i < N; i++)
	{
		//index값 리턴
		//lower_bound의 리턴값이 iterator이므로 index값을 알고 싶다면
		//배열의 첫번째 주소인 a.begin()을 빼준다.
		cout << lower_bound(a.begin(), a.end(), b[i]) - a.begin() << " ";
	}
	
	return 0;
}

0개의 댓글