목록전체 글 (105)
책 읽다가 코딩하다 죽을래
개발자 취업 필수 개념 2주 차에는 협업 도구인 Git과 협업 커뮤니티인 Github를 배웠다. 목차 1. Git 2. Git 구조 3. Git 실습 4. GitHub 5. Branch 6. Pull Request 1. Git 더보기 규모가 큰 프로젝트, 현업에서는 여러 명의 개발자들과 협업하는 일은 기피할 수 없다. 이렇게 여러 명의 개발자들이 하나의 프로젝트를 동시에 개발할 때 어떤 식으로 협업을 할까? 차례대로 한 사람씩 돌아가면서 기능을 구현하면서 완성된 결과물은 카톡으로 공유하는 방법을 사용할까? 이런 방식으로 협업을 하는 것은 비효율적이며 동시에 여러 명이 같은 프로젝트를 할 수 없을 것이다. 그래서 많은 개발자들은 동시에 여러 명이 프로젝트를 관여해도 문제가 없고, 무엇이 달라졌는지 확인하기..
재귀 함수는 함수 안에 자기를 다시 호출하는 함수이다. 알고리즘 문제 중 어떤 패턴이 반복적으로 나오거나, 같은 문제를 여러 번 풀어야 하는 상황이 생길 때 쓰이는 방법이다. 재귀 함수를 만드는 방법은 간단하다. def infinity: print("재귀함수가 뭐냐면은...") infinity() 함수 안에 다시 자신의 함수를 호출하면 된다. 근데 위의 예시는 계속 자신의 함수를 무한정 호출하게 되므로 스택오버플로우 오류가 일어난다. def function(k): if k
이런 배열이 있고 나는 'mango'라는 단어가 이 배열에 있는지 탐색한다고 가정하자 배열에 어느 특정 값을 찾으려면 당연히 처음부터 끝까지 하나씩 하나씩 찾아봐야 한다. 마치 배열 요소 닫힌 박스라고 생각하고 거기서 망고가 들어있는 박스를 찾으려면 하나하나씩 일일이 다 열어봐야 한다. 우린 이렇게 처음부터 순차적으로 데이터를 찾아보는 것을 순차 탐색이라 부른다. 여기서 운이 좋게도 한 번에 그 박스를 찾으면 행복하겠지만 맨 마지막에 그 박스를 찾으면 나는 운이 더럽게도 없다며 생각할 것이다. 여기서 순차 탐색의 시간복잡도를 알 수 있다. 찾고자 하는 데이터가 배열의 맨 앞에 있다면 시간 복잡도는 O(1)이지만 맨 뒤에 있었다면 시간복잡도는 O(N)이 걸릴 것이다. 즉 배열의 크기가 클수록 더 많은 시간..
개발자 취업 필수 개념 1주 차가 시작되었다. 목차 0. 클린 코드의 목적 1. 의미 있는 이름 2. 추상화 3. 예외 4. 리팩토링 0. 클린 코드의 목적 더보기 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다. - Object Oriented Analysis and Design with Application의 저자 그래디 부치- 항상 코드를 깨끗한 상태로 유지해야 합니다. 왜냐면, 깨끗한 코드가 있어야 깨끗한 코드를 만들 수 있습니다. 기존에 깨끗한 코드가 있어야 빠르게 코드를 이해하고 깨끗한 코드를 작성할 수 있기 때문입니다. 빨리 가기 위한 단 하나의 방법은 "깨끗한 코..
자료구조 중에서 자주 쓰이는 Array와 LInkedList를 서로 비교하겠다. 언어는 Python 기준으로 하겠다. (선언할 때 배열 크기를 정해야 하는 c++, 자바의 정적 배열과는 달리 Python의 배열은 동적 배열이다.) 다음 간단한 배열의 예를 들어보자 배열은 index와 데이터로 이루어져있다. index는 0으로부터 시작되어 데이터의 순서를 매기며 데이터는 int형부터 시작되어 그 어떤 데이터 타입도 들어갈 수 있다. 여기서 배열의 어떤 하나의 데이터에 접근하는데 걸리는 시간은 얼마나 소요될까? 정확히 말하자면 시간복잡도 O는 얼마일까? 답은 O(1)이다. 내가 접근하고 싶은 데이터가 배열의 맨 앞에 있는 뒤에 있든 중간에 있는 ary[0], ary[2], ary[4] 이런 식으로 단 한 번..
GD프로젝트 알고리즘 수업 마지막 주 차가 시작되었다. 그럼 마지막주 차에는 라인, 카카오, 삼성 코딩 테스트 위주로 공부하게 되었는데 이에 대해 설명하겠다. 목차 1. 2019년 상반기 LINE 인턴 채용 코딩테스트 2. 2020 카카오 신입 개발자 블라인드 채용 1차 코딩 테스트 3. 삼성 역량 테스트 1. 2019년 상반기 LINE 인턴 채용 코딩 테스트 더보기 문제 Q. 연인 코니와 브라운은 광활한 들판에서 ‘나 잡아 봐라’ 게임을 한다. 이 게임은 브라운이 코니를 잡거나, 코니가 너무 멀리 달아나면 끝난다. 게임이 끝나는데 걸리는 최소 시간을 구하시오. 조건은 다음과 같다. 코니는 처음 위치 C에서 1초 후 1만큼 움직이고, 이후에는 가속이 붙어 매 초마다 이전 이동 거리 + 1만큼 움직인다. ..
문제 스택 (stack)은 기본적인 자료구조 중 하나로, 컴퓨터 프로그램을 작성할 때 자주 이용되는 개념이다. 스택은 자료를 넣는 (push) 입구와 자료를 뽑는 (pop) 입구가 같아 제일 나중에 들어간 자료가 제일 먼저 나오는 (LIFO, Last in First out) 특성을 가지고 있다. 1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지를 알아낼 수 있다. 이를 계산하는 프로그램을 작성하라. 입력 첫 줄에 n (1 ≤ n ≤ 100,000)이 주어..
1. 시간복잡도 더보기 시간 복잡도는 입력값에 따라 문제를 해결하는데 걸리는 시간과의 상관관계를 말합니다. 똑같은 알고리즘에 입력값이 몇 배로 늘어남에 따라 문제를 해결하는 데 걸리는 시간은 몇 배만큼 늘어나는지 보는 것이다. 우리는 똑같은 입력값이라도 당연히 더 빠른 시간 안에 입력을 처리하는 알고리즘을 선호한다. 즉 걸리는 시간이 줄어들수록 시간 복잡도는 작아지며, 시간 복잡도가 작은 알고리즘이 좋은 알고리즘이다. 시간 복잡도에 대해서 설명하기 위해 똑같은 목적을 가진 두 개의 알고리즘을 살펴보겠다. 두 개의 알고리즘의 목표는 배열 안에 숫자 중 가장 큰 최댓값을 찾는 로직이다. array = [1,3,6,5,4,2] def findMaxValue(array): max_num = array[0] fo..