오랫만입니다. 정렬에 대해서 배웠으니, 오늘은 프로그래머스에 있는 가장 큰 수를 풀어보도록 하겠습니다. 쉽지 않아 보입니다. 옛날 (브, 실, 골 티어로 이루어진) USACO 실버나, 아니면 COCI 2번이나 3번 정도에 나왔던 문제로 기억합니다. 일단, 문제가 무엇을 요구하는지는 알았습니다. 조건을 해석해 봅시다. n의 최댓값이 10만이니, O(nlogn)이나, O(n) 정도의 복잡도를 생각할 수 있습니다. 물론, O(n^2)에서 상수 최적화를 잘 해서 통과할 수도 있겠지만, 상수 최적화 같은 경우에는, ps를 조금 깊숙히 하셔야 하는 부분입니다. 코딩 테스트에서 안 풀리는 복잡도가 정해인데 상수로 잘 뚫어야 하는 문제가 나왔다. 그러면 거르면 됩니다. 일단, 구하고자 하는 것은, 어떻게 배열을 적절히..
전체 글 검색 결과
문자열 다룰 때, strcpy 함수를 많이 쓰곤 했습니다. 그런데, stpcpy 정도는 알아두어도 크게 손해볼 거 같지는 않았습니다. 백준의 몇몇 문자열 관련 문제들을 풀어보면서 뼈저리게 느끼기도 했고요. man 페이지를 읽어보면 공부할 만한 키워드들이 상당히 많이 나오는데요. 그것들에 대한 자세한 내용들은 하나 하나 시스템에 대해 공부하면서 파 보기로 합시다. 먼저, stpcpy는 strcpy와 하는 일이 매우 유사해 보입니다. src가 가리키는 문자열의 내용을 dest에 복사한다는 것도 같아 보이고요. 그런데, 오늘 배울 함수는 리턴 값이 its end라고 합니다. 이게 무슨 이야기인지 잘 모르겠군요. 코드를 하나 작성해 봅시다. 예제 프로그램은 위와 같습니다. 실행 결과는 어떻게 나왔을까요? 이렇게..
제가 제대로 된 코딩을 한 지 별로 안 되서 그런지, 백준 1442번 같은 문제를 만나면 당황스럽더라고요. 문제는 다음과 같습니다. 부끄럽게도, 어떻게 Dynamic programing을 해서 트래킹을 해야 할 지 감이 오지 않았습니다. 그러면 어떻게 해야 할까요? 손을 놓고 가만히 있어야 할까요? 아닙니다. 정확하게 문제를 앞쪽, 뒤쪽으로 나누었을 때, 적절한 전처리를 해서, 앞쪽만 보고 접근할 수 있다면, 양방향 탐색과 유사한, 중간에서 만나는 meet in the middle 이라는 기법을 고려해 볼 만 합니다. 코딩 테스트에서 제일 중요한 것은 문제를 어떻게 읽느냐였다고 했습니다. 앞에 15개, 뒤에 16개로 왜 나눌까요? 일단, 그 전에 R - L이 20만 이하인 경우부터 해결해 봅시다. 먼저,..
나중에 설명할 인덱스를 소개하기 전에, Hash와 균형 트리의 차이점을 짚고 넘어가는 게 나을 듯 싶습니다. 사실, 나중에 인덱스에 대해서 할 때, 이런 이야기는 상당히 많이 나오기 때문입니다. 범위 검색과 동등 검색. 맞나 잘 모르겠어요. 일치 검색인지. 하여튼, Tree 기반 인덱스와 Hash 기반 인덱스가 나오는데요. 이에 대해서 지금은 잘 모르셔도 괜찮습니다. 대신에, 균형 Tree 기반으로 찾는 것과, Hash 기반으로 찾는 것에 대해서 다루고 넘어가도록 하겠습니다. 자료구조에 대해서 복습도 할 겸. 사실 왜 그렇게 하는지 디스크와 메모리에 대한 차이도 이해해야 겠지만, 여기서 길게 언급하면 글이 매우 길어질 듯 싶으니 언급하진 않겠습니다. 먼저, Hash 기반 자료구조는 = 검색에 특화된 구조..
java의 클래스들을 뜯다 보면, final 이라던지, static final과 같은 키워드가 생각보다 자주 보인다는 것을 알 수 있어요. 특히, String은 이 키워드가 상당히 많이 붙어있습니다. 이것은 무엇을 하는 것일까요? 한 번 값이 정해지면 그 값을, 수정할 수 없게 만드는 것입니다. 언제 정해질 수 있을까요? 메모리에 올라갈 때. 한 가지 예를 들어보겠습니다. String 클래스 안에는 final 필드인 value가 있습니다. 이것은 문자열의 실제 내용을 저장하기 위한 char형 배열입니다. 이것은 언제 값이 정해지나요? 생성자에서 초기화를 할 때 값이 정해집니다. String 객체 a를 새로 생성해 봅시다. 그러면, 생성자가 호출이 되고, 152 ~ 153번째 줄이 끝나고 나면, val의 ..
최근댓글