Giter Club home page Giter Club logo

algorithms's Introduction

Hits

알고리즘(algorithms) 👀

백준에 올려진 문제들을 풀고 문제 해결을 위한 다양한 방법과 절차를 탐색하는 과정을 가지기 위하여 개설하였습니다.


📎 파일명

githubname.lang
# bee.tsc
#  커밋 룰
문제번호: 문제 제목 (ticket_number)
# 1659: 수 (Hard) (#4)

🗄️ 폴더 및 파일 구조

.
├── class01
│   ├── 문제 번호
│   │   └── 깃허브네임.언어 (또는 깃허브네임폴더)
│   ├── 1152
│   └── 2348
│   └── ...
├── class02
├── class03
├── class04
├── class05
├── class06
├── class07
├── class08
├── class09
└── class10

📌 이슈 생성 및 클로즈

  • 등록된 문제가 이슈로 등록되어있는 지 확인
  • 등록된 이슈가 없을 시 이슈 등록
    • 🏷️ (필수) label 1종 이상 추가
      • label 종류(총 215개)
        • 주제별
        • 클래스별
        • 레벨별
  • 문제 풀이 후 커밋
  • 커밋된 내용 확인 후 이슈에서 코멘터리
  • 참여자들 중 마지막 주자의 풀이가 푸시 된 후 마지막 문제 풀이자 외 Assignees에 할당된 2인 이상 확인 후 이슈 클로즈

:note: 소스코드 작성 주의 사항

  • 동작하는(컴파일 가능한) 소스코드 일 것 (오류는 상관 없음)
  • 하나의 문제를 여러가지로 푼 경우, name_method.ex 형태로 파일을 새로 만들 것(이름 폴더 생성)
  • 소스코드 내의 legacy code는 삭제
  • 주석이 길어지는 경우 README.md 이용
  • Pseudo code나 메모를 적는 경우, 정리하여 md 파일로 업로드

📔 출처


✨ 참여자



🔊 알람

운영 중인 디스코드 채널을 통해 등록된 이슈 및 git 로그의 알림이 전달됩니다.

algorithms's People

Contributors

dongsoon-shin avatar functionbee avatar positiveconfident avatar

Stargazers

 avatar  avatar

Forkers

functionbee

algorithms's Issues

규칙 정하기

알고리즘(algorithms)

매일 백준 문제 풀기

파일명

githubname.lang
# bee.tsc
문제번호(ticket_number): 문제제목
# 1659(#4): 수 (Hard)

폴더 및 파일 구조

.
├── class01
│   ├── 문제 번호
│   │   └── 깃허브네임.언어
│   ├── 1000
│   │   └── 9h05t.py
│   └── README.md
├── class02
├── class03
├── class04
├── class05
├── class06
├── class07
├── class08
├── class09
└── class10

이슈 생성 및 클로즈

  • 등록된 문제가 이슈로 등록되어있는 지 확인
  • 등록된 이슈가 없을 시 이슈 등록
  • 문제 풀이 후 커밋
  • 커밋된 내용 확인 후 이슈에서 코멘터리
  • 참여자들 중 마지막 주자의 풀이가 푸시 된 후 마지막 문제 풀이자 외 2인 이상 확인 후 이슈 클로즈

출처

Algorithm repo 이용 제안

개요

제가 알고리즘 문제를 200문제 정도 풀면서 느꼇던 것 여러가지가 있었습니다.
제가 공부했던 방법도 소개 하고, 알고리즘을 같이 공부하는 방법에 대해서 생각해보았습니다.

알고리즘 문제 풀이 방법

  1. 문제 파악
    -> 예를 들어, 백준 2750번은 수 정렬하기 문제 입니다. 여기서 알고리즘은 정렬 알고리즘을 사용합니다.
    -> 정렬 알고리즘은 버블 정렬부터 퀵 정렬까지 생각해 볼 수 있습니다.
    -> 문제에서 요구하는 사항이 없다면, 당연히 퀵 정렬을 사용하는 것이고 요구되는 정의사항이 있다면 정의사항에 맞추어 풀면 됩니다.
    -> 가장 중요한 것은 문제의 요구사항을 파악하는 것입니다.

  2. 수도 코드 작성 (생략 가능)
    -> 처음 풀어보는 문제는 작성해보는 것이 도움이 됩니다.
    -> 문제가 파악이 되었다면 수도 코드를 작성합니다.
    -> 수도 코드는 문제를 코드로 나타내는 가장 atom한 형태 입니다.
    -> 풀이를 간접적인 코드로 나타내는 형태라 도움이 많이 됩니다.

  3. 수학적 계산 (생략 가능)
    -> 수도 코드를 작성한 것을 실제 얼마나 효율적인지를 판단하기 위해서 계산을 해봅니다.
    -> 예를 들어

// Bubble sort
void foo(int a, int b)
{
    for(i = 0 ; i < array.length ; i++)
    {
        swap(a, b);
    }
}

이런 함수가 존재한다면 for문에서 저희는 해당 알고리즘이 얼마나 효율적인지 미리 계산해 볼 수 있습니다.
계산하는 것은 당연히 시간복잡도를 이용합니다. 버블 소트의 경우 최악의 경우 $O(n^2)$의 시간복잡도를 갖죠.
$O(n)$ 뿐만이 아니라 $o(n)$$\Omega$$\Theta$ notation에 대해서도 모두 적어보면 좋습니다.

참고: 빅오-오메가-세타
참고2: 알고리즘책

  1. 코드 작성
    -> 이제 실제 동작하는 코드를 작성합니다.
    -> 자신이 원하는 언어로 쓰는 것이 좋지만, 코딩 테스트를 준비하고 있다면 C++ 또는 Python을 추천합니다.
    -> C++은 지원 하지 않는 코딩테스트는 본적이 없고, python도 요즘들어서 거의 다 지원합니다.
    -> 알고리즘 수업이 C++로 진행되는경우가 많이 있어서 C++이 접근성이 좋습니다.
    -> python은 정말 빠른 코드작성이 가능하기도 하고 입력과 출력을 제일 편하게 입력이 가능하기 때문에 Python을 추천합니다. (배우기도 편하구요)

  2. 공유 (같이 하기)
    -> 알고리즘을 몇번 풀다 보면 궁금증이 생깁니다.
    -> 나는 이렇게 풀었는데 이게 가장 효율적인 방법인가? 다른사람들은 어떻게 풀었지?
    -> 코드를 공유하고 코드를 작성하기 위한 일련의 과정들을 같이 공유해보는 것이 가장 좋습니다.
    -> 저는 백준 문제를 풀고나면 맞춘 사람 메뉴에 들어가서 메모리와 시간이 가장 빠른 코드들을 검색해서 찾아 보곤 합니다.

  3. 코딩 테스트를 준비한다면
    -> 코딩 테스트를 준비한다면 하나의 문제를 고민하기 보다는 여러 문제를 접하고 푸는 것이 좋습니다.
    -> 예를 들어, 내가 어떤 문제를 1시간 또는 자기가 설정한 시간 이내에 풀지 못했다면 과감하게 정답을 보고 체크를 해두고 넘깁니다.
    -> 반드시 오답노트를 작성해야 합니다. 그냥 넘기면 안돼요. (백준에 스크랩 기능이 있습니다.)
    -> 쭉 풀다보면 자신이 약한 부분이 보이는데 이부분에 대한 이론과 코드를 복습하면 됩니다.
    -> 최소 300문제 이상의 알고리즘 문제를 풀어야 합니다. (기초 문제 제외 하고 DP 문제부터 한다고 가정)

  4. 책을 보면서 공부한다면
    -> 알고리즘의 끝판왕은 밀레니엄 수학 문제 중, 리만 가설과 함께 나열 되는 P-NP 문제까지 공부하는 것입니다.
    -> 여기까지 오신다면 알고리즘으로 공학박사를 따시면 됩니다. (사실 수학에 더 가까움)
    -> 책에서 P-NP까지 어떻게 도달 되는지 알려줍니다.
    -> 물론 P-NP 까지는 아니더라도 Graph algorithm, knapsack problem까지는 보시는 것을 추천 드립니다.
    -> 이후 AI나 Computer vision 쪽을 배우시면 도움이 많이 됩니다.

사실 7번은 개발자보다는 연구자에 조금더 가까운 학습 방법입니다. 자기 취향껏 하시기 바랍니다.
2, 3번은 사실상 생략 가능하지만 깊게 공부하고 싶다면 하는 것을 추천합니다.

같이 알고리즘 공부하기

제안 하는 것은 위의 5번입니다. 각자 이름의 폴더를 만들거나 repo를 만들고 같은 문제를 풀어서 코드를 공유 하는 것입니다.

  1. 같은 문제를 풀기
  2. 풀이 접근 방법 작성
  3. 코드 공유

공유 하는 방법은 여러가지를 이용하면 좋을 것 같습니다.
블로그를 이용해도 되고, github을 이용해도 되고 방법에 대해서는 같이 이야기 해보면 좋을 것 같군요.

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.