백준 18870 : 좌표 압축
백준 (C99)/정렬 (完) 2022. 2. 18. 17:02

https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net 푸는데 뒤지게 오래걸렸다. 접근 방법이 어려웠다기보단 구현이 어려웠다. 이 문제를 풀면서 가장 어려웠던건 바로 범위가 엄청나게 크다는 것 인데, 덕분에 여러가지 최적화를 학습할 수 있었다. 이 문제는 3가지정도를 떠올려야 하는데, 1. 인덱싱 2. 중복제거(unique) 3. 이분탐색 되시겠다. 전체적으로 생각한건 일단 입력배열에 값을 받고, 이를..

백준 10814 : 나이순 정렬
백준 (C99)/정렬 (完) 2022. 2. 6. 20:26

정렬 문제를 풀다보면, 단계적으로 학습하는 듯한 느낌을 계속 받는다. 물론 그래서 단계적 학습이겠지만 이 문제도 이전에 있던 구조체-퀵 정렬을 사용하여 풀어보았다. #include #include #include typedef struct arr { int num; char name[101]; int age; } member; int compare(const void *a, const void *b) { member m1 = *(member *)a; member m2 = *(member *)b; if(m1.age > m2.age) return 1; else if(m1.age m2.num) return 1; else if(m1.num ..

백준 1181 : 단어 정렬
백준 (C99)/정렬 (完) 2022. 2. 6. 20:17

이번에도 역시 구조체를 응용한 퀵 정렬을 사용하였다. 문제 자체의 난이도가 높지는 않았다 #include #include #include typedef struct arr { char word[51]; int length; } words; int compare(const void *a, const void *b) { words str1 = *(words *)a; words str2 = *(words *)b; if(str1.length > str2.length) return 1; else if(str1.length < str2.length) return -1; else return strcmp(str1.word, str2.word); } int solve() { int N; scanf("%d", &N); ..

백준 11651 : 좌표 정렬하기 2
백준 (C99)/정렬 (完) 2022. 2. 6. 14:43

이전 문제랑 별 다를 거 없는 문제.. 이전 문제에서 compare만 조금 바꿔서 넣으면 된다. #include #include typedef struct arr { int x; int y; } axis; int compare(const void *a, const void *b) { axis p1 = *(axis *)a; axis p2 = *(axis *)b; if(p1.y > p2.y) return 1; else if(p1.y p2.x) return 1; else if(p1.x < p2.x) return -1; else return 0; } } int solve() { int N; scanf("%d", &N); axis res[N]; fo..

백준 11650 : 좌표 정렬하기
백준 (C99)/정렬 (完) 2022. 2. 6. 14:40

와 좌표 정렬~~ 쉽져~~ 그냥 정렬하면 되겠네요 무지성 정렬~~~~~~~~~~~~~~~~~~ #include int solve() { int N, temp; scanf("%d", &N); int axis[N][2]; for(int i=0;i p2.y) return 1; else if(p1.y < p2.y) return -1; else return 0; } } int solve() { int N; scanf("%d", &N); axis res[N]; for(int i=0;i

백준 1427 : 소트인사이드
백준 (C99)/정렬 (完) 2022. 2. 5. 23:21

1. 입력받은 수의 자릿수 확인 2. 자릿수만큼의 크기인 배열 생성 3. % 연산을 통해 숫자 하나하나 떼기 4. qsort로 내림차순 정렬 #include #include int compare(const void *a, const void *b) { return *(int *)b - *(int *)a; } int solve() { int N, temp, size = 0; scanf("%d", &N); temp = N; while(temp > 0) { temp /= 10; size++; } int res[size]; for(int i=0;i