이곳에서 새롭게 주목받는 프로그래밍 언어 Swift로 구현한 널리 알려진 알고리즘과 자료구조를 만나볼 수 있습니다. 각 구현에는 작동 원리에 대한 상세한 설명이 함께 제공됩니다.
시험 준비를 위해 이론을 공부하는 컴퓨터 공학 전공자나, 실무에서 사용하는 기술의 이론적 배경을 다지고 싶은 독학 프로그래머 모두에게 이 공간이 도움이 될 것입니다!
이 프로젝트의 핵심 목표는 알고리즘의 작동 원리를 명확하게 설명하는 것입니다. 실제 프로젝트에 바로 가져다 쓸 수 있는 라이브러리를 만드는 것보다는, 코드의 명확성과 가독성에 중점을 두었습니다. 다만, 대부분의 코드는 실제 개발 환경에서도 사용할 수 있는 수준으로 작성되었으며, 필요한 경우 약간의 수정을 통해 여러분의 코드베이스에 맞게 조정할 수 있습니다.
모든 코드는 Xcode 10과 Swift 4.2 버전과 호환됩니다. Swift의 최신 버전에 맞춰 계속해서 업데이트할 예정입니다. GitHub 페이지 버전의 저장소를 찾는다면 여기를 확인하면 됩니다.
😍 여러분의 제안과 기여를 환영합니다! 😍
알고리즘과 자료구조란 무엇인가? 알고리즘의 기본 개념을 알아보자.
왜 알고리즘을 배워야 할까? 알고리즘이 자신에게 맞지 않다고 생각한다면 이 글을 읽어보자.
빅오 표기법. "이 알고리즘은 **O(n)**이다"와 같은 표현을 자주 사용한다. 이게 무슨 뜻인지 모른다면 먼저 이 글을 읽어보자.
알고리즘 설계 기법. 직접 알고리즘을 만드는 방법을 배워보자.
기여 방법. 피드백을 남기려면 이슈를 보고하거나, 풀 리퀘스트를 제출하자.
알고리즘과 자료구조를 처음 접한다면, 다음 주제부터 시작하는 것이 좋다:
정렬 알고리즘이 어떻게 동작하는지 보는 것은 재미있지만, 실제로는 직접 정렬 루틴을 구현할 일은 거의 없다. Swift의 기본 sort()
함수가 충분히 강력하다. 하지만 궁금하다면 계속 읽어보자.
기본 정렬 알고리즘:
빠른 정렬 알고리즘:
하이브리드 정렬 알고리즘:
특수 목적 정렬 알고리즘:
비효율적인 정렬 알고리즘 (사용하지 말 것!):
특정 작업에 적합한 데이터 구조를 선택할 때는 몇 가지 요소를 고려해야 한다.
첫째, 데이터의 형태와 수행해야 할 작업의 종류가 중요하다. 키를 통해 객체를 조회하려면 사전(dictionary) 구조가 필요하다. 데이터가 계층적 구조를 가진다면 트리 구조가 적합하다. 데이터가 순차적이라면 스택이나 큐를 사용한다.
둘째, 가장 자주 수행할 작업의 종류도 고려해야 한다. 특정 데이터 구조는 특정 작업에 최적화되어 있다. 예를 들어, 컬렉션에서 가장 중요한 객체를 자주 찾아야 한다면 일반 배열보다 힙(heap)이나 우선순위 큐가 더 적합하다.
대부분의 경우 내장된 Array
, Dictionary
, Set
타입만으로 충분하지만, 때로는 더 정교한 구조가 필요할 수 있다...
소프트웨어 개발자 면접 질문 중 상당수는 알고리즘 퍼즐로 구성된다. 여기 몇 가지 재미있는 퍼즐을 소개한다. 더 많은 퍼즐과 해답은 여기와 여기에서 확인할 수 있다.
마음에 드셨나요? Swift로 배우는 자료구조와 알고리즘을 확인해 보세요. Swift 알고리즘 클럽 팀이 직접 집필한 공식 서적입니다!
이 책에서는 연결 리스트, 큐, 스택과 같은 기본 자료구조부터 시작해 Swift 스타일로 구현하는 방법을 배웁니다. 이후 일반 트리, 이진 트리, AVL 트리, 이진 탐색 트리, 트라이 등 다양한 트리 구조를 다룹니다.
버블 정렬과 삽입 정렬을 넘어 더 나은 성능의 알고리즘인 병합 정렬, 기수 정렬, 힙 정렬, 퀵 정렬을 배웁니다. 또한 방향성 그래프, 무방향 그래프, 가중치 그래프를 활용해 현실 세계의 다양한 모델을 표현하는 방법을 익히고, 너비 우선 탐색, 깊이 우선 탐색, 다익스트라 알고리즘, 프림 알고리즘을 사용해 그래프와 트리를 효율적으로 탐색합니다. 이를 통해 최단 경로 찾기나 네트워크에서 최소 비용 계산과 같은 문제를 해결할 수 있습니다.
이 책을 마치면 자료구조와 알고리즘을 활용해 일반적인 문제를 해결하는 실질적인 경험을 쌓게 됩니다. 또한 자신만의 효율적이고 유용한 구현을 개발하는 데 큰 도움이 될 것입니다.
책은 raywenderlich.com 스토어에서 구매할 수 있습니다.
Swift Algorithm Club은 원래 Matthijs Hollemans가 만들었다.
현재는 Vincent Ngo, Kelvin Lau, 그리고 Richard Ash가 관리하고 있다.
Swift Algorithm Club은 raywenderlich.com 커뮤니티의 가장 알고리즘에 능한 멤버들이 함께 만든 프로젝트다. 우리는 항상 도움을 찾고 있다. 클럽에 참여해 보는 건 어떨까? :]
모든 콘텐츠는 MIT 오픈소스 라이선스의 조건에 따라 사용할 수 있다.
여기에 게시하거나 이 포럼을 통해 풀 리퀘스트를 제출함으로써, 여러분은 제출하거나 생성한 모든 콘텐츠(코드와 텍스트 모두)가 이 라이선스의 적용을 받는 데 동의하는 것이다. Razeware, LLC 및 기타 관련자들은 이 콘텐츠에 대해 라이선스에 명시된 모든 권리를 갖는다. 이 라이선스의 정확한 조건은 여기에서 확인할 수 있다.