c언어에서 time(NULL) 함수로, 1970년 1월 1일부터 현재까지 경과된 초를 리턴한다고 했었습니다. 이 값만 끌어와서 뭔가 의미있는 데이터로 가공하고 싶은데, 어떻게 하면 좋을까요? 현재까지 경과된 초를 넘겨주면, 데이터를 잘 가공해서, struct tm *형을 리턴해 주는 함수가 있는데요. 이것이 localtime 함수입니다. struct tm *localtime(time *cur_t); 그러면, struct tm형은 어떠한 필드들로 이루어져 있을까요? 예제에서 다루는 중요한 필드만 몇 개 봅시다. tm_sec, tm_min, tm_hour는 각각 시, 분, 초를 의미합니다. 그리고, tm_mday, tm_mon, tm_year가 있는데요. 이것은, 각각 몇 일, 몇 월, 몇 년임을 의미합니다..
분류 전체보기 검색 결과
리눅스에서는 '|'라는 문자와 ''와 같이 명령어를 쓰는 경우가 많아요. 전자는 파이프, 후자는 리다이렉션이라고 이야기를 하는데요. 오늘은 그 중, 파이프 명령어를 알아보도록 하겠습니다. 파이프란, 어떠한 프로세스의 출력이, 그 다음 프로세스의 입력이 되는 것을 말합니다. 여기까지만 봐서는 무슨 말인지 이해가 안 갈 듯 싶네요. 예제를 몇 개 들어보겠습니다. 먼저, 현재 디렉토리에 있는 모든 파일과 디렉토리를 이름 오름차순으로 9개만 자세히 보는 명령을 작성해 봅시다. 아니, 이게 무슨 끔찍한 조합인 거 같지만, 사실 그리 어렵지 않습니다. 먼저, 무엇부터 해야 할까요? 현재 디렉토리에 있는 파일 목록 모두를 자세히 출력해야 합니다. 이것은 ls -al로 할 수 있어요. 다음에, 이 결과값을 이용해서, ..
스택을 응용한 문제 중에는, 히스토그램에서 가장 큰 직사각형이라는 문제가 있습니다. 히스토그램 안에서 그릴 수 있는 직사각형 중, 넓이가 가장 큰 직사각형의 넓이를 구하는 문제입니다. 이것은 푸는 방법이 상당히 많습니다. 세그먼트 트리로 풀어도 되고, 분할 정복으로 풀어도 됩니다. 여기에서는 우리가 배운 스택을 응용해서 풀어보도록 하겠습니다. 먼저 데이터가 다음과 같이 들어왔다고 해 봅시다. 히스토그램에서, 총 7개의 직사각형이 있어요. 그러면 arr[0]과 arr[8]은 0으로 초기화를 합니다. 이를 더미 데이터라고 합니다. 처리하기 쉽게 처리한 겁니다. 그리고 arr[1] = 2, arr[2] = 1, arr[3] = 4, arr[4] = 5, arr[5] = 1, arr[6] = arr[7] = 3..
1차원, 2차원 배열에서 구간이 주어졌을 때 어떻게 부분합을 구하는지 알아봅시다. 3차원 이상인 경우에는, 포함 배제의 원리를 알고 있어야 됩니다. 그렇기 때문에, 저는 1차, 2차원 array에서 subsum, 부분합을 구하는 것만 알려드리도록 하겠습니다. 먼저 누적합을 1차원에서 어떻게 구하는지 봅시다. 배열 arr이 있습니다. 제가 보라색으로 칠해놓은 것은 더미 데이터를 넣는데요. 0을 넣습니다. 0에 x를 더해도 0이기 때문입니다. 즉, 0은 덧셈에 대한 역원이기 때문에 보통 0으로 초기화를 합니다. nj[x]를 다음과 같이 정의합시다. 구간 [0,x]에 있는 수들의 합. 그렇다면 nj[0]의 값은 0입니다. 아무것도 없으니까 합이 0일 수 밖에 없기 때문입니다. 그러면 [0,x]까지의 합은 어떻..
오늘은 Java에서 쓰레드를 생성하고 실행하는 방법에 대해서만 알아보도록 하겠습니다. Runnable을 매개값으로 하는 Thread 생성자를 호출하거나, 아니면 worker가 Thread를 상속하는 방법 2가지가 있는데요. 이 둘을 먼저 알아보도록 하겠습니다. 코드를 컴파일 하고 실행을 합니다. static void main(String args[]); 이 친구가 있는데요. 이 친구를 실행하고 종료하는 쓰레드를 메인 쓰레드라고 합니다. 그런데, worker를 하나 더 만들 수 있어요. 즉, Main 실행 흐름만 만드는 것이 아니라, 다른 역할을 하는 스레드 또한 만들 수 있는데요. 예를 들어서, Main에서 게임의 전체적인 알고리즘 같은 것을 수행한다면, Worker에서 배경 음악을 재생한다던지. 그런 ..
최근댓글