생각보다 많이 귀찮았던 문제이다. 사실 문제 자체는 이전 정렬문제들의 혼합버전같은 느낌이었다 단지, 이번에는 수의 범위가 양수만이 아닌 음수도 포함되어 있다는 점 까지 고려해서 코드를 작성하면 되겠다. #include #include int compare(const void *a, const void *b) { int num1 = *(int *)a; int num2 = *(int *)b; if (num1 > num2) return 1; else if(num1 < num2) return -1; else if(num1 == num2) return 0; } int solve() { int N, sum = 0, freq = 0, range = 0; int cnt[8001] = {0,}, check[8001] =..
또 수 정렬하기다. 애초에 문제 잘 보다보면, 카운팅 정렬을 사용하라고 아주 친절하게 나와있다. 카운팅 정렬이란, 1. 일단 숫자를 쭉 입력받는다. 2. 그 숫자가 몇번 나왔는지 count하는 배열을 만든다. 3. i번째 순서라고 가정할때, count 배열의 i+1번째 방에다 i번의 값을 더해준다. 4. 입력배열을 A, 카운팅 배열을 C, 출력 배열을 B라고 하면 A 배열을 거꾸로 돌리면서 A값의 카운팅 배열 방을 참조한다, 그리고 이 값을 출력배열인 B의 방번호에 넣어준다 설명이 좀 복잡한데, B[C[A[i]]] 가 되는거다. 그리고 이 방의 값은 A[i]를 넣어준다. 그리고 A값의 카운팅 배열 방의 값을 1 빼준다. 5. 이 과정을 반복하면 수가 정렬된다. 설명 봐서는 뭔소린지 잘 이해가 안 될 수도..
담주월욜날 휴가나간덩 ㅎ 이미 다른사람들 다 출타했음ㅠ 친구랑 같이 올라가고싶었는ㅌ데 그건 쫑났다 좀 아쉽긴한데,, 주말 쉬고 나간다고 생각하면 기분이 또 좋음,, 미복귀 3일 벌었따 11일이라 휴가일수가 많은건 아닌데 ㅠㅠ 월요일아 얼른 와라ㅏ좀 쉬다오고싶다 그나저나 스킨 바꾼거 참 맘에 든다 ㅎ 깔끔해서 이쁜듯
풀고나니 어렵지 않았는데 풀때는 아리까리했던 문제다. 중요한건 체스판이 바뀌는 횟수를 측정하는건데, 시작점이 고정이 아니라는 것이다. 시작지점에 따라 체스판을 다시 색칠해야하는 횟수가 바뀐다, 우리는 이 중에서 최소를 찾아야 한다는게 문제이다. 그렇다면 일단 체스판 색깔을 바꾸는 로직을 짠 다음에, 시작 위치를 바꿔주는 로직을 합쳐서 코드를 짜면 되겠다는 생각으로 코딩을 시작했다. 우선, 나는 색깔을 바꾸는 로직을 처음에 다음과 같이 생각했다. 1. 그 줄 맨 앞의 문자를 A라는 변수에 저장한다. 2. 올바른 다음 상태(다시 칠하지 않아도 되는 경우) 저장하는 변수 B를 만든다. 3. A의 변수를 토대로 B의 값을 정한다. ex) A가 W라면 B의 값은 B가 된다. 4. 반복문을 통해 그 줄의 값들을 비..
https://dojang.io/mod/page/view.php?id=638 qsort에 대한 더 자세한 정보이다. C 언어 코딩 도장: 73.2 퀵 정렬 함수 사용하기 이번에는 퀵 정렬 함수를 사용해보겠습니다. 퀵 정렬 함수에는 정렬할 배열 또는 메모리의 주소, 요소 개수, 요소 크기, 비교 함수를 넣어줍니다(stdlib.h 헤더 파일에 선언되어 있습니다). qsort(정 dojang.io 이전 문제와 같다고 생각하면 오산이다, 똑같은 코드 두번 넣어서 맞을 문제가 어디있겠냐고 이전 선택정렬을 사용한다면 백이면 백 시간오바로 틀린다 C언어를 하면서 없으면 다 본인이 만든 경험에 비추어, C에서 다른 정렬을 내가 구현할 생각에 머리가 아팠는데 놀랍게도 C언어에는 퀵 정렬이 함수로 존재한다. 바로 stdl..
심플하게 정렬하면 되는 문제다. 정렬 방법이야 뭐 버블정렬도 있고 선택정렬도 있고,, 저는 선택정렬 사용했습니다 #include int solve() { int N, temp; scanf("%d", &N); int arr[N]; for(int i=0;i
Comment