mysql에서 sysdate()와 now()는 현재 날짜와 시간을 리턴해 주는 함수입니다. 예를 들어서 도서관 데이터 베이스가 있다고 합시다. 어떠한 사람이 어떤 책을 빌려갔는지, 언제 빌려갔는지 등을 테이블에 저장할 거에요. 보통, 30일 정도 지나면 연체인데요. 이 때, 현재 시간이, 빌린 날로부터 30일 이상 경과되었다면 연체로 처리하면 될 거에요. 그럴 때, 보통 두 함수를 써요. 현재 시간과 날짜를 알아와야 할 때. 물론, 여기서 데이터를 더 잘 조작해야 겠지만요. 이 두 함수는 하는 일은 같지만, 차이가 있는데요. 이 부분에 대해서, 알아보도록 하겠습니다. 먼저 sysdate() 부터 봅시다. 다음 쿼리를 작성해 봅시다. sysdate() 함수 사이에, sleep 함수를 호출했는데요. 대충 1..
분류 전체보기 검색 결과
저번 시간에 스택을 배웠으니까, 응용 문제들을 다뤄보도록 하겠습니다. 오늘은 조금 쉬운, 올바른 괄호 문자열을 검사하는 알고리즘을 작성해 보겠습니다. 올바른 괄호 문자열은 다음과 같이 재귀적으로 정의됩니다. 빈 문자열은 valid하다. (괄호문자열) 역시 valid 하다. 괄호문자열에 괄호문자열을 concat 한 것도 valid 하다. 예를 들어서 ()(())은 valid 합니다. 하지만, ())이나, ()((은 valid하지 않습니다. 이것은 어떻게 구현하면 좋을까요? 먼저, "())"이 올바른지 판단해 보도록 하겠습니다. '('이 들어오면, 괄호 스택에 (을 push 합니다. '('이 들어왔기 때문에, 스택에 '('가 들어가 있습니다. 그 다음에는 ')'가 옵니다. 이 때에는 stack의 맨 위의 원..
2가지 정렬을 배웠습니다. insert, select. 이 두 개는 키 값들을 비교를 했습니다. 2개의 값을 compare 했습니다. 제가 오늘 설명하는 counting sort, 계수 정렬은 이 둘과 크게 다른 점이 있는데요. 두 개의 키 값을 비교하지 않는다는 것입니다. 즉, 비교 기반 정렬이 아닙니다. 그러면 어떻게 구현을 할까요? arr = [3, 6, 3, 0, 4, 1]이라고 해 봅시다. 최솟값이 양수고, 최댓값 또한 적당히 작은 수라고 해 봅시다. co[x]를, 배열에서 x가 나타난 빈도수라고 정의합시다. 그러면, arr을 순회하면서, 어떠한 값 v가 나오면 co[v]의 값을 하나씩 증가시키면 될 거에요. 먼저 co 배열은 아래와 같이 초기화가 되어 있습니다. 1번째 원소를 봅니다. 3입니다..
Java의 String은 불변 객체입니다. String a와 String b가 있을 때, a = a+b; 이 문장은 어떻게 동작할까요? 결론부터 말하자면, 비효율적으로 동작합니다. 어디서 오버헤드가 많이 발생하는지 천천히 분석해 보도록 합시다. 디버깅을 해 볼 프로그램은 아래와 같습니다. String 객체 str에다가 "05"라는 String을 계속 +하고 있습니다. String a와 b가 있을 때, a+b의 결과값은, String a 뒤에 b를 이어 붙인 String 객체입니다. 예를 들어서, a가 "chogahui"이고 b가 "05"라면, a+b는 "chogahui05"입니다. 9번째 줄에 break point를 걸어두고 어떻게 함수를 호출하는지 간략하게 보도록 하겠습니다. 일단, 뜬금없이 Strin..
어떠한 수가 배열 내에 있는지를 빠르게 찾고 싶습니다. 그럴 때, 이진 검색, binary search를 이용할 수 있습니다. 그런데, 전제 조건은 정렬이 되어 있어야 한다는 것입니다. 왜 그럴까요? 정렬이 되어 있지 않다고 해 봅시다. 중앙에 있는 3을 기준으로 9는 왼쪽에 있고 오른쪽에 없을 수도 있어요. 그러면 3을 기준으로 왼쪽에서 찾아야 합니다. 그런데, 이런 경우도 있을 수가 있어요. 중앙에 있는 3을 기준으로 좌측에 없고, 우측에 있다. 이런 경우는 또 어떤가요? 내가 있는 위치를 기준으로 9가 왼쪽에 있을 수도 있고, 오른쪽에 있을 수도 있고, 없을 수도 있기 때문에, 현재 탐색하는 위치를 기준으로 절반씩 해를 좁혀나갈 수가 없어요. 따라서, 선형 탐색으로 해결을 할 수 밖에 없을 거에요...
최근댓글