알고리즘 지식이 왜 필요한가? 바로 논리적인 사고력을 기르기 위해서입니다. 누군가는 알고리즘을 실무에 가서 전혀 도움이 되지 않는 지식이라고 말하기도 합니다. 사실 그 말들이 아예 틀린건 아닐 수 있어요. 알고리즘에서 배우는 여러 기법들이 실제 실무에 가서 쓰이는건 절대 보편적이지는 않긴 해요. 들어간 회사의 주요 서비스에 따라, 들어간 회사가 소위 말해 얼마나 좋은 회사이냐에 따라 알고리즘 기법을 몇년간 아예 쓰지 않을 수 있긴 해요. 그럼에도 불구하고 많은 기업에서 알고리즘을 중요하게 생각하는 이유가 바로 앞서 말씀드렸던 논리적인 사고력이에요. 알고리즘은 배우다 보면 천재이거나 이미 아는 문제가 아닌 이상 문제를 해결하는 방법에 가장 큰 시간을 투자해야 해요. 해결하는 방법을 명확하게 설정하지 못하고..
사전 지식 -빅오 표기법 -가장 기본적인 시간 복잡도 계산 방법 -정렬 알고리즘 지식(버블 정렬~퀵 정렬, 병합 정렬 등) -자료구조(리스트, 스택, 힙 등) -그외 여러 알고리즘 기법들에 대해 구현은 못 해도 개념은 알고 있는 정도(Brute-force 등) 알고리즘 종류 이전에 들었던 알고리즘 강의의 선생님께서는 실제 대기업 문제 출제 경험까지 있으신 분이었습니다. 그분의 말씀으로는, 단 4개의 알고리즘 기법을 제대로 알고 있으면 대회 수준이 아닌 코딩 테스트 기준으로는 모든 기업에서 출제되는 문제를 풀 수 있다고 말씀하셨습니다. 저 또한 그렇게 배웠기 때문에 4개의 알고리즘에 대해서만 정리하는 글을 작성해 보겠습니다. 링크를 통해 알고리즘을 학습해 주시기를 바랍니다. 최대한 이해하시기 쉽도록 노력하..
문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/135807 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 지문이 적지는 않네요. 프로그래머스에서는 영희와 철수라고 했지만, 편의상 간단하게 말씀드리자면 "배열 a, b가 있고, 특정 값(정수) c가 있을 때, a의 모든 값을 c로 나눌 수 있으며, b의 모든 값을 c로 나눌 수 없는 c의 최댓값 또는 그 반대의 값을 찾아라"입니다. 예를 들어볼게요. a = [3, 6, 9] b = [4, 10] 이 상황에서 특정 값을 3으로 둔다..
들어가며 이분 탐색을 공부하신다면 알고리즘의 기초적인 부분은 알고 있으시다고 가정하겠습니다(참고로 '이진 탐색 = 이분 탐색'입니다). 빅오 표기법과 버블 정렬을 모르는데 이분 탐색을 공부할 이유는 없으니까요. 이 글은 알고리즘의 가장 기초부터 알려드리는 글이 아니며, 곧 적을 아래의 사전 지식들을 완벽하게는 아니지만 알고 있다고 가정합니다. 알고리즘의 기초 개념부터 천천히 말씀드리는 것이 아닌, 이미 지식은 있지만 코딩 테스트 문제를 막상 잘 풀지 못하는 분이 코딩 테스트에 합격하기 위한 글입니다. 이진 탐색을 배우기 위해 필요한 사전 지식은 다음과 같습니다. 사전 지식 -빅오 표기법 -가장 기본적인 시간 복잡도 계산 방법 -정렬 알고리즘 지식(버블 정렬~퀵 정렬, 병합 정렬 등, 퀵/병합 정렬 구현은..
안녕하세요. Readerr입니다. 자료구조, 알고리즘 등 많은 부분에서 반드시 알아야 할 것이, "그래서 시간 복잡도는 얼마인가?"입니다. 면접에서 어떤 자료구조의 시간 복잡도는 어떻게 되는지 물어보는 경우도 많고, 알고리즘 문제를 풀 때도 특정 시간 복잡도 내에 풀어야 하는 경우가 많죠. 그렇다면 이 '시간 복잡도'가 무엇이냐. 말 그대로 "특정 작업을 하는데에 얼마만큼 시간이 걸리느냐"입니다. 그러나 일반적으로 '몇 회의 작업을 하느냐'라는 의미로 보는 것이 더 쉽겠네요. 빅오 표기법 시간 복잡도에 사용되는 대표적인 개념은 바로 빅오(Big-O) 표기법이에요. 어렵게 생각하실 거 없이, 변수들 중 최고차항만 계산하겠다는 겁니다. 예를 들어 'x² * 2x * 3'이라는 계산식이 있다고 가정했을 때, ..
소개 정렬 알고리즘 중 대표적인 알고리즘인 퀵 정렬을 소개하고자 한다. 퀵 정렬을 소개하기에 앞서, 대표적인 알고리즘들의 시간/공간 복잡도 표를 확인하면 다음과 같다. 평균 최악 메모리 버블 정렬 n^2 n^2 1 선택 정렬 n^2 n^2 1 삽입 정렬 n^2 n^2 1 퀵 정렬 n log n n^2 n log n 병합 정렬 n log n n log n n 힙 정렬 n log n n log n 1 퀵 정렬은 이름 그대로 '빠른 알고리즘'이라는 의미인데, 실제로 위 알고리즘들 중에서는 일반적으로 가장 빠른 알고리즘이라고 한다. 여기서 약간 의아할 수 있는 부분이 '병합, 힙 정렬이 최악의 경우에 퀵 정렬보다 시간 복잡도가 높은데, 어떻게 가장 빠른 알고리즘이지?'라는 생각이 들 수 있는데, 그 이유는 다음..