Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 게리멘더링2
- 조세퍼스 순열
- 버킷 정렬
- C/C++ 구현
- 별 찍기 10
- heap
- 백준
- 시간 복잡도
- c#
- 백준 2447
- 스택의 특징
- 백준 17779
- 원판 돌리기
- 구현
- 백준 17471
- 백준 5397
- Stack 이란
- AVL 시간 복잡도
- 5397
- 백준 1158
- 백준 17822
- 자료구조
- 해시구현
- dfs
- 풀이
- ㅣ풀이
- 백준 1406
- qorwns
- 1764
- 해시 구현
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 10814] 나이순 정렬 본문
https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
www.acmicpc.net
요구사항
1. 나이 오름차순
2. 먼저 가입한 순
풀이
1. 입력할때 가입한 순서를 저장하여 정렬한다.
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int PN = 23;
const int HASH_SIZE = 10000;
struct go{
int size;
char ch[101];
int num;
};
go map[100001];
go buf[100001];
int n;
void merge_sort(go arr[], int len){
if(len<2){
return;
}
int i,j,mid,k;
mid=len/2;
i=0;
j=mid;
k=0;
merge_sort(arr,mid);
merge_sort((arr+mid),(len-mid));
while(i<mid && j <len){
if(arr[i].size < arr[j].size){
buf[k++]=arr[i++];
}
else if(arr[i].size == arr[j].size){
// cout<<arr[i].size<<endl;
if(arr[i].num > arr[j].num){
buf[k++]=arr[j++];
}
else{
buf[k++]=arr[i++];
}
}
else{
buf[k++]=arr[j++];
}
}
while(i<mid){
buf[k++]=arr[i++];
}
while(j<len){
buf[k++]=arr[j++];
}
for(int k=0 ; k <len ; k++){
arr[k]=buf[k];
}
}
int main(){
cin>>n;
for(int i=0 ; i < n ; i++)
{
scanf("%d",&map[i].size);
scanf(" %s",&map[i].ch);
map[i].num=i;
}
merge_sort(map,n);
for(int i=0 ; i < n; i++){
printf("%d %s\n",map[i].size,map[i].ch);
}
}
Comments