분류 전체보기18 [TIL]2022/03/05 매크로 매크로 쓸 때는 return 안쓴다. 예를 들어서 두 수를 비교해서 앞에 게 더 크면 1을 반환하고 아니면 0을 반환하는 삼항 연산을 매크로로 구현하고 싶다고 하자. #define Check(x,y) x > y ? 1 : 0 이렇게 쓰는 게 맞다. 매크로는 어떤 값을 반환하는 함수를 만드는 게 아니다. 그냥 계산하는 매크로를 만드는 거다. #define Check(x,y) return (x > y ? 1 : 0) 그래서 이거 처럼 return 문을 넣으면 '식이 필요합니다'라는 오류가 뜬다. 삼항 연산자 삼항 연산자를 써서 return 값을 받고 싶을 때는 int check(int x, int y){ x > y ? return 1 : return 0; } 이렇게 return을 값 마다 앞에 쓰는 .. 2022. 3. 5. [TIL]2022/03/01 C static 배열과 dynamic 배열 (malloc)의 차이 다음과 같은 static하게 정의된 배열이 있다고 하자. int arr1[3] = {1,2,3}; printf("%p\n", arr1); printf("%p\n", &arr1); output: 0000003CF52FF648 0000003CF52FF648 arr1는 배열의 첫번째 원소를 가리키는 포인터고, &arr1는 배열 전체를 가리키는 포인터이다. 내포하는 의미는 다르지만 arr의 첫 원소 주소 값으로 같은 값을 가진다. 그런데 이건 static하게 정의된 배열에 관해서는 맞는 말이다. 다음과 같이 malloc을 사용해서 정의한 배열이 있다 하자. int* arr2 = (int*)malloc(sizeof(int) * 4); printf(.. 2022. 3. 1. [TIL]2022/02/28 백준 1004 어린 왕자 경로가 원과 최소한으로 교차하는 횟수는 1. 시작점만 둘러싸는 원의 개수 + 2. 도착점만 둘러싸는 원의 개수다. 아래 그림 처럼 시작점만 둘러싸는 원의 개수가 3개, 도착점만 둘러싸는 원의 개수가 1개 일 때, 경로가 원과 최소한으로 교차하는 횟수는 4 번이다. 만약 두 점을 동시에 포함하는 원이 있거나, 두 점 모두 바깥에 있는 원이 있는 경우는 원과 경로가 닫지 않도록 할 수 있기 때문에 무시해도 된다. 그러니까 XOR(시작점 포함 원, 도착점 포함 원) 의 개수를 새면 답이다. 풀이 #define _CRT_SECURE_NO_WARNINGS #include #include #include #define CheckBound(x,y,a,b,r) (pow((x) - a, 2) +.. 2022. 2. 28. [TIL]2022/02/27 1. 백준 1018 체스판 다시 칠하기 주어진 보드 판에서 가능한 모든 8 X 8 경우들을 체스판이랑 비교해서 최소한의 노력이 드는 걸 찾으면 된다. 문제를 풀 때 가장 어려웠던 부분은 반복문이 많아서 r, c, r_cnt, c_cnt 값들을 정확히 초기화 시키는 일 이었다. 처음 풀었을 때 런타임 에러(StoreToNullPointer)가 떴었는데, 입력 받는 보드를 저장하는 matrix 행렬의 행의 크기를 M이 아닌 M + 1로 하니 잘 돌아갔다. 문자열을 받을 때는 맨 뒤의 NULL을 생각해서 한칸 여유를 두는 게 중요한 거 같다. 그리고 입력을 getchar()로 받았는데, 이 함수를 쓰려면 buffer를 비우고 써야겠다. 맨 처음에 N, M을 scanf()로 받고 보드를 getchar()로 받았.. 2022. 2. 27. 이전 1 2 3 4 5 다음