백준 2108 : 통계학
백준 (C99)/정렬 (完) 2022. 2. 5. 23:03

생각보다 많이 귀찮았던 문제이다. 사실 문제 자체는 이전 정렬문제들의 혼합버전같은 느낌이었다 단지, 이번에는 수의 범위가 양수만이 아닌 음수도 포함되어 있다는 점 까지 고려해서 코드를 작성하면 되겠다. #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] =..

백준 10989 : 수 정렬하기 3
백준 (C99)/정렬 (完) 2022. 2. 5. 16:05

또 수 정렬하기다. 애초에 문제 잘 보다보면, 카운팅 정렬을 사용하라고 아주 친절하게 나와있다. 카운팅 정렬이란, 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. 이 과정을 반복하면 수가 정렬된다. 설명 봐서는 뭔소린지 잘 이해가 안 될 수도..

백준 1018 : 체스판 다시 칠하기
백준 (C99)/브루트 포스 (完) 2022. 2. 4. 21:04

풀고나니 어렵지 않았는데 풀때는 아리까리했던 문제다. 중요한건 체스판이 바뀌는 횟수를 측정하는건데, 시작점이 고정이 아니라는 것이다. 시작지점에 따라 체스판을 다시 색칠해야하는 횟수가 바뀐다, 우리는 이 중에서 최소를 찾아야 한다는게 문제이다. 그렇다면 일단 체스판 색깔을 바꾸는 로직을 짠 다음에, 시작 위치를 바꿔주는 로직을 합쳐서 코드를 짜면 되겠다는 생각으로 코딩을 시작했다. 우선, 나는 색깔을 바꾸는 로직을 처음에 다음과 같이 생각했다. 1. 그 줄 맨 앞의 문자를 A라는 변수에 저장한다. 2. 올바른 다음 상태(다시 칠하지 않아도 되는 경우) 저장하는 변수 B를 만든다. 3. A의 변수를 토대로 B의 값을 정한다. ex) A가 W라면 B의 값은 B가 된다. 4. 반복문을 통해 그 줄의 값들을 비..

백준 2751 : 수 정렬하기 2
백준 (C99)/정렬 (完) 2022. 2. 3. 23:01

https://dojang.io/mod/page/view.php?id=638 qsort에 대한 더 자세한 정보이다. C 언어 코딩 도장: 73.2 퀵 정렬 함수 사용하기 이번에는 퀵 정렬 함수를 사용해보겠습니다. 퀵 정렬 함수에는 정렬할 배열 또는 메모리의 주소, 요소 개수, 요소 크기, 비교 함수를 넣어줍니다(stdlib.h 헤더 파일에 선언되어 있습니다). qsort(정 dojang.io 이전 문제와 같다고 생각하면 오산이다, 똑같은 코드 두번 넣어서 맞을 문제가 어디있겠냐고 이전 선택정렬을 사용한다면 백이면 백 시간오바로 틀린다 C언어를 하면서 없으면 다 본인이 만든 경험에 비추어, C에서 다른 정렬을 내가 구현할 생각에 머리가 아팠는데 놀랍게도 C언어에는 퀵 정렬이 함수로 존재한다. 바로 stdl..

백준 2750 : 수 정렬하기
백준 (C99)/정렬 (完) 2022. 2. 3. 22:36

심플하게 정렬하면 되는 문제다. 정렬 방법이야 뭐 버블정렬도 있고 선택정렬도 있고,, 저는 선택정렬 사용했습니다 #include int solve() { int N, temp; scanf("%d", &N); int arr[N]; for(int i=0;i

백준 1436 : 영화감독 숌
백준 (C99)/브루트 포스 (完) 2022. 2. 3. 20:03

결국 1부터 나머지가 6이 세번 연속되는 수를 찾는것이므로, 나머지 연산을 통해서 지속적으로 카운팅을 해준다. #include int solve() { int N, cnt = 0, temp = 1, cur = 0, i = 0; scanf("%d", &N); while(cur 0) { if(temp % 10 == 6) cnt++; else cnt = 0; if(cnt == 3) { cur++; if(cur == N) printf("%d\n", i); } temp /= 10; } cnt = 0; i++; } } int main() { solve(); return 0; } 문제의 난이도가 크게 어렵지 않았다. 오히려 지금 안올라온 체스판이 저한테는 조금 더 ..