실전 문제는 굉장히 쉬웠다.
위에서 아래로
단순히 내림차순 정렬하는 문제였다.
c++의 sort 함수는 오름차순 정렬이 기본으로 설정되어 있다. 내림차순 정렬을 하고 싶을 때에는 compair 함수를 생성해서 sort의 세 번째 인자로 넣어주면 된다.
int compair(int a, int b) {
return a > b;
}
int main() {
int N;
int i;
int num[501];
scanf("%d", &N);
for (i = 0; i < N; i++) {
scanf("%d", &num[i]);
}
sort(num, num + N, compair);
for (i = 0; i < N; i++) {
printf("%d ", num[i]);
}
}
/*
3
15
27
12
*/
성적이 낮은 순서로 학생 출력하기
c++의 pair를 사용해서 단순히 오름차순 정렬을 하는 문제였다.
pair<int, string> student[100001];
int main() {
int N;
char name[101];
int score;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%s %d", name, &score);
printf("%s %d\n", name, score);
student[i].first = score;
string n = name;
student[i].second = n;
}
for (int i = 0; i < N; i++) {
printf("%s %d\n", student[i].second.c_str(), student[i].first);
}
sort(student, student + N);
for (int i = 0; i < N; i++) {
printf("%s ", student[i].second.c_str());
}
}
/*
2
홍길동 95
이순신 77
*/
두 배열의 원소 교체
2 개의 배열을 입력받고, A 배열은 오름차순, B 배열은 내림차순 정렬을 한 뒤 K번 바꿔치기를 해서 A 배열의 원소들의 합이 최댓값이 되도록 하는 문제였다. 이때 모든 원소는 10,000,000보다 작은 자연수라는 항목이 있어서 합을 저장하는 변수인 sum을 long long 타입으로 정해줬다.
int a[100001], b[100001];
int compair(int a, int b) {
return a > b;
}
int main() {
int N, K;
int t;
long long sum=0;
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < N; i++) {
scanf("%d", &b[i]);
}
sort(a, a + N);
sort(b, b + N, compair);
for (int i = 0; i < K; i++) { //K 번의 바꿔치기
if (a[i] < b[i]) {
t = a[i];
a[i] = b[i];
b[i] = t;
}
else break;
}
for (int i = 0; i < N; i++) {
//printf("%d ", a[i]);
sum +=a[i];
}
printf("%.0lld", sum);
}
/*
5 3
1 2 5 4 3
5 5 6 6 5
*/
http://www.yes24.com/product/goods/91433923