전체 글

최선을 다하자
[시간 복잡도(Time complexity)] 자료의 수 n이 증가할 때 시간이 증가하는 대략적인 패턴을 표현하는 방식. 보통 Big-O 표기법을 사용한다. 수치가 작을수록 효율적인 알고리즘이지만 문제에 따라 O(2^n) 또는 O(n!)등의 복잡한 알고리즘을 사용해야만 하는 경우도 존재한다. O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(2^n) < O(n!) 함수를 설계할 때 최대 O(n log n)정도의 시간 복잡도를 가지게 하는 것이 바람직하다. O(1) - 상수 n에 관계없이 일정한 시간이 걸리는 알고리즘. 대부분의 경우에서 가장 단순하고 빠르다. stack의 push/pop 연산, 배열/큐 등의 원소에 대한 접근 등이 이에 해당한다. function fo..
본격적으로 CS 공부에 들어가기 전에 '프로그래밍이란 무엇인가'에 대해 정리해보고자 한다. 컴퓨터 프로그래밍 또는 간단히 프로그래밍 혹은 코딩은 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술이다. 출처: 위키백과 - 컴퓨터 프로그래밍 프로그래밍은 컴퓨터 언어를 이용해 알고리즘의 조합으로 원하는 목적을 달성하는 프로그램을 작성하는 과정을 말한다. 많은 사람들이 프로그래밍을 단순히 코드를 작성하는 것 또는 알고리즘을 작성하는 것으로 생각하곤 한다. 나 또한 프로젝트에 참여하기 전에는 단순 알고리즘 구현 능력만이 코딩 실력의 전부라고 생각하고 있었다. 하지만 프로젝트를 진행해보고, 우테코 프리코스와 최종 코딩테스트에 참여하면서 생각이 바뀌게 되었..
나는 최근까지 프로그래밍에 있어 전공 지식의 필요성이 크게 와닫지 않았었다. 전공 지식보다는 특정 언어의 문법과 알고리즘을 활용하는 것이 훨씬 더 중요하다고 생각했기 때문이었다. 하지만 몇 개의 프로젝트들을 진행하면서, 어떤 코드를 작성하든 '내가 자료형과 작동 원리에 대해 더 공부하면 더 잘, 더 깔끔한 코드를 작성할 수 있을 것 같은데' 라는 생각이 끊임없이 머리를 맴돌았다. 무엇보다도, 사용하는 언어들이 많아지면서 서로의 문법, 메모리 할당 방식 등이 헷갈리는 경우가 많아졌다. 그러다 보니, 여러 언어들을 꿰뚫는 기본 지식을 통해 변화에 유연하게 적응할 수 있는 프로그래머 가 되고 싶었다. 그래서 지금까지는 '그렇구나' 하고 넘겼던 전공 지식들을 다시 돌아보며 내실을 다지려고 한다.
파란의 이야기
하루하루 꾸준히