Giter Club home page Giter Club logo

2022-algorithm-study's Introduction

2022-algorithm-study

2Digit 사내 알고리즘 스터디를 위한 레파지토리입니다.


Welcome! 🎉

안녕하세요!🙇‍♂️ 스터디장 🦒기린입니다. 이 페이지에서는 어떻게 공부해야 할 지, 어떤 방식으로 이루어지는지, 스터디 간 지켜야 할 규칙은 어떤 것이 있는지를 명시합니다.

소개 부분은 주저리 주저리를 적어두셨으니 방식 부분으로 바로 패스하셔도 됩니다.


소개

컴퓨터 공학 수업을 들으며 교수니께서 알고리즘이란 "입력을 적절한 출력으로 바꾸는 것" 이라고 간단하게 설명하셨습니다. 현실 세계에서 일어나는 일들을 해결하는 문제해결 단위, 그것을 우리는 알고리즘이라고 정의합니다.

그럼 왜 알고리즘이 필요해?

한 문제를 해결하는 방법은 1가지가 있을 수도 있고 수십가지가 될 수도 있습니다. 정렬 알고리즘만 봐도 매우 빠르다고 알려진 퀵 정렬 부터, 기수정렬, 버블정렬, 힙정렬 등이 존재하고, 매우 느리고 비효율적이라고 알려진 Bogo 정렬 과 같은 무식한 방법도 존재합니다. (참고: 정렬 시각화 비교 영상)

다만 문제는 특정 문제를 맞닥뜨렸을 때 정렬하는 방법론과 마찬가지로 어떤 것은 매우 빠르나, 어떤 것들은 매우 느리게 동작할 수 있다는 것입니다.
조금 어려운 문제에 대해 어떤 것들은, 매우 빠르게 동작하나, 일부 케이스에서는 답이 의도한 것과 다른 휴리스틱과 같은 알고리즘이 존재하기도 합니다.

우리는 이러한 문제에 있어 조금 더 효율적으로 푸는 방법을 익히고, 본인의 알고리즘 설계능력을 향상시키며, 이를 자신의 개발에 적용하는 것을 목적으로 합니다.

그리고 평소에 쓰던 Git을 조금 다르게 써보시면서, 이런식으로도 Git과 Github을 사용할 수 있다는 것을 알아가셨으면 합니다.


Code Style

필수 사항은 아니나 따르시는 것이 좋습니다. (Code Style은 강력하게 Review 하겠습니다)

+ Jetbrains 계열 IDE의 경우 Ctrl + Alt + L (Windows, Linux), Command + Option + L (Mac OS)로 코드 정리를 쉽게 할 수 있습니다.

  • Python 언어의 경우 PEP8 스타일가이드를 따라 코드를 작성하도록 합니다.

Python PEP8 Style Guide

  • Java의 경우 Google Java Style Guide를 따라 코드를 작성하도록 합니다.

Google Java Style Guide

  • C++의 경우 Google C++ Style Guide를 따라 코드를 작성하도록 합니다.

Google C++ Style Guide

방식

Branch

  • 먼저 해당 레파지토리(Organization Repository)에 직접적으로 Push하는 것을 엄금합니다. 🚫

  • Organization Repositorybranch 목록을 보면 본인의 이름으로 된 branch가 생성되어 있습니다. 해당 브런치가 PR Target Repository가 됩니다.

Pull Request

  • 모든 PUSHFork를 통해 본인의 레파지토리에 복제한 후, 본인의 이름과 같은 branchPull Request(PR)를 통해 반영하게 됩니다.
  • Github Pull Request의 경우 문제를 풀고 Push한 후 PR을 하였는데, 다시 다른 문제를 풀어 Push 한다면 해당 커밋 리스트가 그대로 반영이 되어 한 PR당 문제가 쌓이면 보기 좋지 않습니다.

이런 일을 방지하기 위해 Target Repository(Organization Repository)branch는 만들어져 있는 자신의 이름으로 하되, Origin Repository(본인의 Fork된 Repository)Branch는 문제 번호, 문제를 푼 날짜 등으로 설정하여, PR당 최대 1~2개까지의 문제만 포함할 수 있도록 합니다.

  • 반영을 위한 최소 Approve 수는 1개 입니다. ✅

  • Pull Request의 제목 양식은 아래와 같습니다.

(이름) 문제 사이트 제목[예:백준, 프로그래머스 등] - 문제 제목1 예: (Giraffe) 프로그래머스 - 프렌즈 사천성

Merge Strategy

  • Merge 전략은 Git History의 깔끔한 관리를 위해 (Squash || Rebase)로 한정합니다. (참고 Link: Git Merge Strategy 비교)
    (Merge로 할 경우 해당 멤버의 Branch에 접속하여 Reset 하겠음. 충돌로 인해 rabase or squash가 되지 않는 경우, 질문하거나, 스스로 원인파악 후 직접 히스토리를 관리하여, Git History를 정리할 것.)

Code Review & Discussion

  • Code Review의 종류에 제한은 없습니다. 해당 코드에서 고쳐야 할 부분 뿐 아니라, 자신과 다른점, 배운 점, 어떤 것이 더 효율적인지 등 본인의 성장을 위해서 어떤 것이든 의견을 나누길 바랍니다.👍

- 코드리뷰 예시 사진 -

image

  • 문제를 풀다가 어려운 부분이 있다면 Discussion을 활용할 수 있습니다. 모르는 문제나 알고리즘적인 성능 등에 대해 질문하고, 의견을 교환합니다. 👩‍👩‍👧‍👦

image

Comment

  • 문제 풀이 주석의 첫 부분에는 문제의 제목, 문제의 주석이 담겨야 합니다.

in solution.py

# 프로그래머스 - http://문제링크.com

def solution():
    return "Hello World"
  • 정답 코드를 보는 것은 허용합니다. 주석이나, Wiki를 통해 어떤 것을 배웠는지 남겨야 합니다. 📖

image

Benefit

  • 열심히 코드를 본 당신, 쉬세요!

코드 리뷰한 PR 5개당 1번 쉴 수 있습니다 (패널티에 들어가지 않습니다.)

Panalty

  • 3번 연속 불참하신 분은 해당 스터디에서 강퇴합니다. 🚫

아파도 3번 연속 아플 수는 없겠죠..?

  • Code Review는 최소 주당 2회 이상 하지 않을 시 강퇴합니다. 🚫

다른 사람의 코드도 봐주세요 😭

  • Merge가 주당 1회 이상 하지 않을 시 강퇴합니다. (첫주는 제외합니다.) 🚫

가상 시나리오

  1. 내 레파지토리에 해당 RepositoryFork한다.

image

  1. 문제 제목, 번호 등을 이용하여 본인 레파지토리의 로컬 branch를 만든다.

  2. 해당 브런치에서 문제를 풀고, 본인의 RepositoryCommit & Push 한다.

  3. Pull Request를 통해 반영 요청을 보낸다. ✉️

  4. Approve를 받을 시 본인이 확인 후 해당 부분을 반영, Change Request를 받을 시 피드백을 반영하여 코드를 수정한다. ✏️

  5. 최종적으로 Merge한다. 🙏

  6. 문제 중 얻은 점이나 공유하고 싶은 것은 Organization RepositoryWiki탭에 markdown을 통해 남긴다.


알고리즘, 자료구조 문제를 풀어본 적이 없다면? 📚

관련 도서 링크: 파이썬 알고리즘 공부 도서

저작권 문제로 public하게 공개가 불가능하기 떄문에 필요하신 분은 저에게 비밀번호를 물어주세요!

동빈나 - 실전 알고리즘 강의 📺

C++언어 기반으로 되어 있는 강의이며 언어가 익숙하시다면, 설명과 이론 부분이 좋은 강의이기 때문에 추천합니다.
유투브 링크: 동빈나 - 실전알고리즘 강의


Kakao Open Chat

공지사항, 사소한 질문, 스터디 관련 질문, 경조사 알림 등은 해당 오픈채팅방을 활용하도록 할게요! 👩‍👩‍👧‍👦

카카오톡 오픈채팅
참여 코드: 2digits

2022-algorithm-study's People

Contributors

yangtaeyoung avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.