본문 바로가기
자료구조, 알고리즘/백준 문제풀이

[백준] 21-4분기 KING 알고리즘 스터디_정렬

by 선의 2022. 1. 18.

백준 2750번

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

int compare(const void* a, const void* b) {
	const int* x = (int*)a;
	const int* y = (int*)b;

	if (*x > *y) {
		return 1;
	}
	else if (*x < *y) {
		return -1;
	}
	return 0;
}


int num[1000] = { 0 };

int main() {
	int n;
	cin >> n;


	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}

	qsort(num, (size_t)n, sizeof(int), compare);

	for (int i = 0; i < n; i++) {
		cout << num[i] << "\n";
	}

	return 0;
}

 

백준 2751번

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

int compare(const void* a, const void* b) {
	const int* x = (int*)a;
	const int* y = (int*)b;

	if (*x > *y) {
		return 1;
	}
	else if (*x < *y) {
		return -1;
	}
	return 0;
}


int num[1000000] = { 0 };

int main() {
	int n;
	cin >> n;


	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}

	qsort(num, (size_t)n, sizeof(int), compare);

	for (int i = 0; i < n; i++) {
		cout << num[i] << "\n";
	}

	return 0;
}

위에는 미리 외운 qsort로 빠르게 풀었는데 그 다음 문제부터 난관에 봉착함

바로 구글링하고 vector && sort 내장함수 어떻게 쓰는지 알아봄

 

백준10825

/* vector 만드는 방법 */

vector<name_of_struct_name> object_name(n);
#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

typedef struct {
	string name;
	int kor;
	int eng;
	int math;
}student;

bool compare(student a, student b) {
	if (a.kor == b.kor) { // 두 명 국어 점 수 같을 때
		if (a.eng == b.eng) { // 두 명 영어 점수 같을 때
			if (a.math == b.math) {
				return a.name < b.name; // 수학 점수 비교해서도 같을 때 이름 사전순
			}
			else { 
				return a.math > b.math; // 국어, 영어 같을 때 수학 점수 큰지 반환
			}
		}
		else {
			return a.eng < b.eng; // 국어 점수 같을 때 영어 점수 비교
		}
	}
	else {
		return a.kor > b.kor; // 국어 점수로만 비교
	}
}

int main(void) {


	int n;
	cin >> n;

	vector<student> students(n);

	for (int i = 0; i < n; i++) {
		cin >> students[i].name >> students[i].kor >> students[i].eng >> students[i].math;
	}

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

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

	return 0;
}

sort(시작점, 끝점, 비교하는 함수 || 값);

 

백준 13458

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

int main(void) {
	int n;
	cin >> n;
	vector<int> a(n);
	int b, c;

	
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	cin >> b >> c;

	long long cnt = 0;

	for (int i = 0; i < n; i++) {
		a[i] -= b;
		cnt++;

		if (a[i] <= 0) {
			continue;
		}

			cnt += (a[i] / c);
			if (a[i] % c != 0) {
				cnt++;
			}

	}


	cout << cnt;

	return 0;
}

어디서 틀렸는지 한참 찾음

long long cnt로 변수 타입 바꿔주니까 바로 맞음

이런 문제가 제일 킹받음

 

배운 것 정리

1. c++ qsort

2. c++ sort

3. c++ vector 사용법

 

스터디 자료 https://github.com/Altu-Bitu/Notice/tree/main/09%EC%9B%94%2003%EC%9D%BC%20-%20%EC%A0%95%EB%A0%AC

'자료구조, 알고리즘 > 백준 문제풀이' 카테고리의 다른 글

[백준 2606] 바이러스  (0) 2022.06.21
[백준] 6588 골드바흐의 추측  (0) 2022.04.02
[백준] 1406 에디터  (0) 2022.03.06
[백준 4375] 모듈로 연산이란?  (0) 2022.02.16
[백준] 1920 C언어  (0) 2021.12.25