듣기 시작한 게 엄청 오래됐는데 드디어 오늘 끝났다. 수료증에 9시간이라고 적혀있지만 실제로는 책과 같이 공부하느라 오래 걸렸다. 매일 한 패턴씩 강의듣고, 책내용 정리했었는데 오늘로 그것도 끝이구나. 물론 끝났다고 정말 끝은 아니지만. 원래도 디자인패턴을 배워야겠구나 생각했었는데, 첫 팀 프로젝트를 하고 더더욱 느꼈다. 그저 기능 구현에만 급급하면 안되고, 유지보수까지 생각해서 코드를 작성해야한다는 걸. 이 강의를 들으면서 어떻게 코드에서 군더더기를 덜어내는지, 작성되어있는 코드를 건드리지 않고 새로운 기능을 어떻게 추가하는지 등을 배웠다. 물론 내가 이 강의를 들었다고 해서 디자인패턴을 잘 활용하게 됐다거나 그런 건 아니다. 디자인패턴은 공부한 성과를 바로 얻기 힘들고, 장기적인 관점에서 공부를 해야..
요즘 내 관심사가 오로지 개발 뿐이라 SNS와 브라우저 등등의 알고리즘은 나에게 개발 관련된 컨텐츠들을 추천해주는데 어느날 이 강의 광고가 떴길래 바로 결제했다. 파이썬을 막 배운 다음, 뭔가를 만들어보고 싶어서 장고를 이용해서 웹페이지를 만들긴 했었는데, 그때 GET과 POST도 모르고 그냥 HTTP에 대한 이해가 하나도 없는 상태에서 만들어서 많이 아쉬웠었다. 이제 학원에서 본격적으로 웹 서버 수업을 들어가기 전에 HTTP프로토콜을 한 번 정리할 필요가 있었는데 마침 알고리즘이 이 강의를 추천해준 것이다! 역시 기술의 발전이란... 기본 지식이라고 되어있어서 아무래도 보조해줄 교재가 필요할 거 같아서 도 사서 수업들으면서 같이 보았다. 결과적으로 강의는 끝났는데, 책은 아직 반밖에 못 읽었다... 꼼..
ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD_%EA%B3%84%EC%88%98ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD_%EA%B3%84%EC%88%98 이항 계수 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 조합론에서, 이항 계수(二項係數, 영어: binomial coefficient)는 이항식을 이항 정리로 전개했을 때 각 항의 계수이며, 주어진 크기의 (순서 없는) 조합의 가짓수이다 ko.wikipedia.org 매일 매일 알고리즘 문제를 하나씩 풀고 있는데, 오늘 문제에서는 이항계수라는 개념이 나와서 정리해보려고 한다. 본 내용은 위의 링크를 토대로 학습한 내용을 정리한 것이다. 이해하기 우선 이항계수가 어떤건지 ..
Hoist는 사전상으로 "(밧줄이나 장비를 이용하여)들어[끌어]올리다"라는 의미이다. 자바스크립트에서는 모든 선언을 유효 범위의 가장 위로 끌어올리는 것을 호이스팅(Hoisting)이라고 한다. 즉, 자바스크립트에서 실행 콘텍스트가 어떻게 동작하는지에 대한 생각이다. 이는 '선언과 할당의 분리'와 동일한 의미이다. 하지만 Mozilla의 MDN 웹문서(아래의 링크)에서 확인해보면 호이스팅을 변수 및 함수 선언이 물리적으로 작성한 코드의 상단으로 옮겨지는 것은 아니라고 설명하고 있다. 변수 및 함수 선언은 컴파일 단계에서 메모리에 저장되지만, 코드에서 입력한 위치와 정확히 일치한 곳에 있다고 한다. 어떤 코드를 실행하기 전에 컴파일단계에서 변수 및 함수 선언을 메모리에 저장해두어 선언과 할당의 분리가 가능..
유클리드 호제법은 소인수분해를 하지 않고 2개의 자연수의 최대공약수를 구하는 알고리즘으로 큰 수들의 최대공약수를 구할 때 사용할 수 있다. 이해하기 두 수 a, b가 있다고 하자. a와 b는 공약수 j의 배수이므로 아래와 같다. A = 약수 j * a B = 약수 j * b A를 B로 나누면 아래와 같다. A = (B * x) + y y = A - (B * x) y = (j * a) - (j * b * x) y = j * (a - b * x) 즉, A를 B로 나눈 나머지 y는 A와 B의 공약수 j를 약수로 한다. B = j * b y = j * (a - b * x) 위처럼 b와 y의 공약수는 j이다. 즉, b와 y의 최대공약수(i)는 j와 같거나 j보다 크다. (1) B = 최대공약수 i * c y = ..
정렬 알고리즘은 내가 생각하기에 제일 간단한 알고리즘인데... 종류가 많아서 머릿 속에 빡하고 안 들어오는 느낌이어서 정리해본다. 버블정렬(Bouble Sort) 이해하기 4 3 2 5 1 위와 같은 수열이 있다고 하자. 버블 정렬을 이해하는 데 있어 중요한 것은 버블 정렬을 할 때 수열 중 어떤 하나의 수는 정렬을 따로 할 필요가 없다는 것이다. 왜냐하면 다른 수들이 모두 정렬된 상태라면 자연히 그 숫자도 자리를 찾은 것이기 때문이다. 4 3 2 5(여기까지만) 1 처음 4에서 시작해보자. 우리는 4라는 수를 꺼내서 5가 있는 네번째 자리까지만 가면 된다. 왜냐하면 앞수와 뒷수를 비교하는 과정에서 마지막으로 5와 1을 비교하게 될 것이고, 1은 수열의 마지막이라 비교할 뒷수가 없기 때문이다. 4는 3과..
이름만 봐도 이해하기 힘든 LIS(Longest Increasing Subsequence)는 쉽게 말하자면 나열된 수들 중 오름차순으로 정렬된 가장 긴 부분수열이다. 이해하기 3 1 4 5 2 7 위와 같은 수열이 있다고 하자. 이 때 부분수열은 길이가 1인 부분수열도 있을것이고, 2인 부분수열도 있을것이고, 6인 부분수열도 있을것이다. 제일 앞에 있는 수를 선택할 경우를 생각해보자. 3(★) 1 4 5 2 7 3까지의 수열을 보면 3 밖에 존재하지 않으므로 길이는 1이다. (이 길이는 나중에 써먹어야 하므로 저장해야 한다.) 3 1(★) 4 5 2 7 그 다음 1까지의 수열을 보자. 1까지의 수열([3, 1])에서 부분수열의 최장길이를 구하려면 어떻게 해야 할까? 3과 1을 비교해서 3이 1보다 크므로..
ko.wikipedia.org/wiki/로렘_입숨 로렘 입숨 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 로렘 입숨(lorem ipsum; 줄여서 립숨, lipsum)은 출판이나 그래픽 디자인 분야에서 폰트, 타이포그래피, 레이아웃 같은 그래픽 요소나 시각적 연출을 보여줄 때 사용 ko.wikipedia.org 쉽게 말하자면 더미 텍스트이다. 폰트, 타이포그래피, 레이아웃 같은 그래픽 요소나 시각적 연출을 보여줄 때 사용되는 별다른 의미없는 텍스트이다.