C언어에는 삼항 연산자가 있습니다. 어떻게 쓸까요? ((조건식1)?식1:식2) 여기서 조건식 1이 참이라면 식 1이 평가되고, 아니면 식 2가 평가됩니다. 흐름도는 대충 이런 식으로 갑니다. 그러면 if문이랑 비슷한 점이 많겠군요. 많은데, 보통 if문 안에는 문장들이 옵니다. 그런 반면에, 삼항 연산자는 식이 옵니다. 식이나 값이 온다면, 조건식에 맞으면 값을 어딘가에 대입하는 식으로 많이 쓰시는데요. 예제로 보여드리겠습니다. 예제 1을 봅시다. a와 b를 입력받았습니다. 그리고 6번째 줄을 보시면 (a>b)?a:b 라는 절이 보입니다. 이를 쪼개 봅시다. 그러면 a>b인 경우에, a라는 수식이나 값이 평가가 되고, 그렇지 않다면 b가 평가됩니다. 그 결과를 res라는 변수에 넣고 있어요. 즉, a>b..
전체 글 검색 결과
sleep sort, 슬립 정렬이라고 2년 전이였나? 3년 전에 꽤 핫했던 친구가 있습니다. 사실 왜 Hot했는지는 이해가 가지 않습니다. 아이디어 정도만 보시고 넘어가셔도 무난할 듯 싶어요. 대략적인 구조를 보면, worker 역할을 하는 객체에게 몇 단위시간 동안 sleep 할 건지 그러한 정보를 넘겨주고, 해당 객체가 몇 단위 시간 동안 깨어나면 출력하는 식으로 프로그램을 짜는 듯 싶습니다. 더 쉽게 말하면, 길이가 n인 데이터가 있을 때, worker_i는 arr[i] 단위시간 만큼 잠이 듭니다. t만큼 시간이 지났을 때, t만큼 잠들어야 하는 worker들이 모두 깨어나면서 t를 출력하는 것입니다. 단위 시간이 매우 작다면, 꽤 효율적일 겁니다. 코드는 생각보다 짧은데요. 많이 찾아볼 수 있는 ..
보통 stdin은 표준 입력, stdout은 표준 출력, stderr은 표준 에러를 나타내는 것들입니다. 이에 대해서는 파일에 대해서 다룰 때 이야기 하도록 하고요. 자세히 들어가면 글이 길어질 듯 하니, 간단하게 어떤 식으로만 쓰는지 알아보도록 하겠습니다. 대략적인 그림부터 보겠습니다. 이 그림만 보면, stdin, 즉 표준 입력 스트림에서 읽어오고, stdout, 표준 출력 스트림에 씁니다. 그리고 오류가 발생한 경우 stderr, 표준 에러 스트림에 씁니다. 그런데, 이것을 재지정 하는 방법이 없을까요? 이를 리다이렉션이라고 이야기 합니다. 먼저, >는, 출력 재지향을 의미합니다. 먼저 head 명령어를 이용해 봅시다. 저는 아직 리다이렉션을 하지 않았기 때문에, stdout 스트림을 쓸 것이고, ..
저번에 LIKE 연산자를 배웠습니다. 이번에는 조금 더 복잡한 패턴 매칭에 대해서 다뤄보겠습니다. [관련글] LIKE 연산자 알아봅시다. 눈치 채신 분도 있으실지 모르겠습니다. 자바에서 파싱할 때, 정규 표현식을 자주 쓰는데요. mysql은, REGEXP 라는 것으로, 정규식을 사용할 수 있습니다. 처음과 끝은 각각 ^과 $로 표현할 수 있어요. 예를 들어서, '^a'라면, a로 시작하는 패턴입니다. 그리고 'E$'이라면, E로 끝나는 패턴입니다. 그러면 '^eat$'은 무엇을 의미할까요? "eat"를 찾으라는 거겠네요. 그리고, .은 임의의 문자를 의미하는데요. '^...$'은, 길이가 3인 문자열이 패턴에 매칭된다는 이야기입니다. 이 쿼리를 수행해 봅시다. 그러면 문자열이 시작하고 임의의 문자가 3개..
memset 함수는 시작 주소값부터 sz 바이트만큼, 바이트 단위로 초기화를 해 주는 함수입니다. 보통 2번째 인자에 넣는 값이 0, -1인 경우가 상당히 많은데요. 0x3f나 0x7f 등도 ps에는 꽤 많이 쓰입니다. 그런데, 바이트 단위로 초기화를 하기 때문에, int형 배열이나 long long형 배열과 같은 경우, 배열에 memset 함수로 0, -1은 넣을 수 있는데, 2, 3과 같은 건 넣을 수 없습니다. 이런 건 조심해야 합니다. 사용 방법은 아래와 같습니다. void *memset(void *tar, int value, size_t sz); 요약하면, tar부터, sz byte만큼 바이트 단위로 value라는 값으로 초기화를 하겠다는 의미입니다. 먼저 예제 프로그램 1을 봅시다. 보시면 1..
최근댓글