본문 바로가기
  • Eigenspace of Knowledge

전체 글54

[백준/2164/C] 카드2 간단히 큐의 구조를 생각하여 head의 위치를 바꾸고 적절한 tail위치에 숫자가 오도록 구현해보았다.안정적이지는 않지만 잘굴러간다.배열의 크기는 뒤로 옮겨도 절대 안넘어가도록 넉넉히 잡았다#include int arr[1000001];int main(){ int N; scanf("%d",&N); for(int i=0; i 2025. 5. 26.
[백준/1920/C] 수 찾기 첫번째 시도: 브루트포스로 탐색을 시도해봤지만 당연히 시간초과 O(n^2)#include int main(){ int N,M; scanf("%d",&N); int arrN[N]; for(int i=0; i 두번째시도: 퀵소트로 정렬한 후, 이분탐색으로 해결해보았다. O(nlogn)전반적으로 옳은 코드지만, 문제에서 제시한 범위가 딱 int형의 범위기 떄문에 빼기연산을 할때 오버플로우가 생길 수 있다.#include #include int compare(const void *pa, const void *pb){ return *(int*)pa-*(int*)pb;}int main(){ int N,M; scanf("%d",&N); int arrN[N]; for(int i.. 2025. 5. 25.
[백준/10814/C] 나이순정렬 첫번째시도: 그저 단순히 qsort를 통해서 해결하였다.문제점은, qsort가 불안정정렬(이미 있는 배열을 무작위로 섞은뒤 정렬)이기 때문에 단순히 나이값이 같을때 변환을 안시켜준다고 비교함수를 정의하면 qsort의 불안정성에 의해 같은 나이값 내에서 기존의 정렬이 깨져버릴수도 있다는 것이다.(운이 좋으면 맞을수도 있다)#include #include typedef struct s{ int age; char name[101];}PEO;int compare(const void *pa, const void *pb){ const PEO *a= pa; const PEO *b= pb; if (a->age == b->age) return -1; return a->age - b->age;}int.. 2025. 5. 25.
[백준/11650/C] 좌표정렬하기 첫번째 시도: 좌표구조체를 만들어서 dictionary ordering을 위한 버블소트를 구현하였다(당연히 문제의 의도가 O(n^2)이면 시간초과로 만들 의도기 때문에 실패)#include typedef struct dict{ int x; int y;}DICT;int main(){ int N; scanf("%d",&N); DICT arr[N]; for(int i=0; iarr[j+1].x) || (arr[j].x==arr[j+1].x && arr[j].y>arr[j+1].y)){ t.x = arr[j+1].x; t.y = arr[j+1].y; arr[j+1].x = arr[j].x; arr[j+1].y = arr[j].y; .. 2025. 5. 25.
[백준/2751/C] 수 정렬하기2 Counting sort를 쓰면 쉽게 풀수있다가끔은 (가능하다면) 가장 단순한 방법이 가장 효율적인 알고리즘일수도 있다.참고로 int배열을 전역에서 정의해야 1000000개의 정렬을 담을 수 있다.#include #define SIZE 1000000int cnt[2*SIZE+1];int main(){ int N; scanf("%d",&N); int x; for(int i=0; i 2025. 5. 24.
[백준/2108/C] 통계학 첫번째시도: 정석대로 입력값을 정렬해서 시도해보았지만 계산복잡도가 큰듯하다#includefloat mround(float a){ int r; if(a>=0){ r = a+0.5; return r; } else{ r = a-0.5; return r; }}int main(){ int N; scanf("%d",&N); int listN[N]; for(int i=0; ilistN[j+1]){ int t =listN[j]; listN[j] = listN[j+1]; listN[j+1] = t; } } .. 2025. 5. 23.
[백준/1874/C] 스택 수열 첫번째 시도: possible이라는 NO의 여부를 판단하는 함수를 만들기로 생각문제점) possible이라는 함수가 대부분의 경우에서는 잘작동하는데 허점이 많음 #include int possible(int *goal, int mag){ int max = 1; for (int i = 0; i max) max = goal[i]; if ((goal[i + 1] = 0 && stack[stcur] == goal[glcur]){ printf("-\n"); stcur--; glcur++; } // 2) 아니면 아직 push할 값 남았나? else if (wtcur 두번째시도push와 pop.. 2025. 5. 22.
반응형