안녕하세요. 이번 시간에는 비트 연산자 중에서 요새 자주 써 먹는 것 중 하나인 xor 연산자를 보겠습니다. bit dp를 푸실 때도 나름 유용하게 쓰일 수 있는 것이니 잘 알아가시면 좋겠습니다. 먼저 bitprint 함수를 소개하겠습니다. int형 변수 x가 들어오면, 이것의 비트를 출력해 줍니다. 예를 들어 15는 00000000 00000000 00000000 00001111 이렇게 나타날 겁니다. 보통 비트는 집합과도 잘 쓰이는데요. 예를 들자면 tsp 문제에서 어떤 도시를 방문했는가와 그렇지 않았는가는 0이나 1로 표현이 될 겁니다. 그러니 비트로 나타내면 좋을 거에요. 1번째 도시를 방문했다면 1, 아니면 0. 이렇게요. 여기서 사용되는 것도 집합입니다. 방문한 도시의 집합. 그런데, 집합 S..
C언어 검색 결과
c언어 교재에 단골로 나오는 소재는, 달력을 예쁘게 출력하는 것입니다. 처음 접해보면 어려울 수도 있는데요. 기능을 잘 쪼개고 들어가면 됩니다. 코딩 테스트에서도 기능을 잘 쪼개고 들어가는 것은 굉장히 유용한 스킬이니, 익혀 두시면 좋습니다. 일단, 간단한 플로우 먼저 그려봅시다. 복잡해 보이지만, 사실 yyyy년 mm월 1일의 요일과, yyyy년 mm월이 몇 일까지 있는지만 구하면 어렵지 않게 출력할 수 있음을 알 수 있습니다. 이 기능들을 또 쪼개 보겠습니다. yyyy년 mm월 1일의 요일을 알기 위해서는 기준이 되는 날의 요일을 알아야 합니다. 다음에, 월별로 몇 일까지 있는지를 알아야 합니다. 그래야, 기준 요일로부터 몇 일만큼 지났는지를 누적할 수 있기 때문입니다. 해당 기능을 구현하기 위해서 ..
c언어를 공부하시다 보면, 한 번 쯤 막히는 부분이 있습니다. 배열 포인터. 쉽게 말해서 배열을 가리키는 무언가입니다. 나중에 행 우선 열 우선 방식을 할 때 다시 언급을 하고, 여기에서는 간단하게 언급을 하겠습니다. 이 글을 읽기 위해서 중요한 것은 배열은 배열 그 자체로 다루어야 한다는 점입니다. 4번째 줄을 보시면, 4 by 4짜리 배열이 선언되어 있습니다. 그리고 5번째 줄에, int (*p)[4] = &(a[0])이라 되어 있는데요. 좌항부터 해석해 보겠습니다. 시계 방향 rule에 따라서 보도록 하겠습니다. 먼저, 4번째 줄부터 해석되는데요. (*p)는 p가 포인터이다. 라는 의미입니다. 그런데, 어떤 포인터일까요? 돌려 보니까 [4]라고 되어 있습니다. 이것은 [4]개짜리의 원소를 가진다는 ..
약 5개월 전에, define 전처리문에 대해서 썼습니다. 이번 시간에는 조건부 컴파일을 할 때 많이 써먹는, #if와 #ifdef에 대한 글을 써보도록 하겠습니다. 당연하게도, 백준 사이트에서도 많이 볼 수 있는 코드이기도 합니다. 먼저 위 코드를 보겠습니다. 이상한 va_list라던지 va_start, vprintf, va_end가 나오지만, 여기에서는 중요하지 않습니다. 단지, 가변 인자를 처리하기 위해서 저런 것들을 썼다 정도만 보시면 되고요. 여기서 중요한 것은 13번째 줄의 #ifdef입니다. 이것은 무엇을 하는 것일까요? 위에 보니까 DEBUG라는 것이 정의가 되어 있지 않아요. 아무 결과도 나타나지 않았습니다. 반면에, 이 코드는 위에서 DEBUG라는 필드가 정의되어 있었습니다. 이 경우에..
사실, 저는 백준을 풀 때 define 문을 상수 정의할 때 빼고는 써 본 적이 없었습니다. 실무에서는 어떻게 쓸 지는 잘 모르겠지만요. 상수 정의할 때도 가끔씩 써서, 그리 많이 쓴 적은 없습니다. 물론, C언어 시험 볼 때에는 많이 썼겠지만요. 보통 넓이를 구하는 것은 define이 아니라, 함수로 쓰는 편입니다. 이것은, 배보다 배꼽이 더 커지기 때문에 그렇기도 합니다. 백준을 한참 할 때, 많이 본 질문 글 중 하나는 이것을 잘못 써서 맞았는데 왜 틀려요? 하는 경우였습니다. 전처리기에 대한 이야기는 나중에 정리할 때 한꺼번에 언급하기로 하고요. 오늘은 그냥 간단하게 개론만 보도록 하겠습니다. 먼저 상수 정의할 때에는 요긴하게 쓰입니다. 이것은 제가 세그 트리를 구축할 때, (1
최근댓글