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. 이분탐색 되시겠다. 전체적으로 생각한건 일단 입력배열에 값을 받고, 이를..

정렬 문제를 풀다보면, 단계적으로 학습하는 듯한 느낌을 계속 받는다. 물론 그래서 단계적 학습이겠지만 이 문제도 이전에 있던 구조체-퀵 정렬을 사용하여 풀어보았다. #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 ..

이번에도 역시 구조체를 응용한 퀵 정렬을 사용하였다. 문제 자체의 난이도가 높지는 않았다 #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); ..

이전 문제랑 별 다를 거 없는 문제.. 이전 문제에서 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..

와 좌표 정렬~~ 쉽져~~ 그냥 정렬하면 되겠네요 무지성 정렬~~~~~~~~~~~~~~~~~~ #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

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
Comment