Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Task: Algorithm brute force 관련 정리 #23

Closed
fkdl0048 opened this issue Dec 7, 2023 · 2 comments
Closed

Task: Algorithm brute force 관련 정리 #23

fkdl0048 opened this issue Dec 7, 2023 · 2 comments
Assignees

Comments

@fkdl0048
Copy link
Owner

fkdl0048 commented Dec 7, 2023

Task: Algorithm brute force 관련 정리

정리 끝나는 대로 codereview에 정리..

문제풀이는 브릿지 알고리즘에서 주 마다 진행하고

브루트 포스가 어느정도 정리할 레벨이 된다면 정리할 것

각 풀이 기록들도 같이 첨부 (PR올린거 참고)

Brute force

BF관련 알고리즘 정리로 알고리즘 문제 해결 전략책을 읽고 해당 내용을 토대로 문제 풀이, 내용 정리를 진행한다.

무식하게 풀기 정리 내용

알고리즘을 순차적으로 공부해야겠다고 마음을 먹고 책을 구매했다.

단순 문제풀이보단 개념에 대한 명확한 이해 후 활용을 통한 학습이 더 값지고 오래갈 것 같다고 생각해서 책에서 추천하는 초심자 커리큘럼으로 진행했다.

책 내용 총 정리

최근에 6장을 마무리하게 되어서 한번 내용을 되짚어보며 글을 작성한다.

추가로 실제 작업중인 프로젝트에 적용된 내용이 있어 리뷰한다.

이후로도 공부하게 되는 다양한 알고리즘에 재귀는 필수적인 내용이라 이를 학습하기에 가장 좋은 시작이었다.

BF에 관한 자세한 내용은 위 정리 내용을 참고하는게 좋을 것 같고 핵심적인 부분을 다시 짚어본다.

  • 무식하게 푼다고 해서 좋지 못한 알고리즘이 아니다. 어떤 때에는 가장 빠르다.
  • 재귀 호출에는 기저 사례를 잘 처리해야 한다. ('더이상 쪼개지지 않는' 최소한의 작업)
  • 풀이하기 위해 문제를 분할하고 기저사례를 선택하여 구조를 만든다.
    • 완전 탐색은 존재하는 모든 답을 하나씩 검사하므로, 걸리는 시간은 가능한 답의 수에 정확히 비례한다.
      • 최대 크기의 입력을 가정했을 때 갑의 개수를 계산하고 이들을 모두 제한 시간 안에 생성할 수 있는지 가늠한다. (적용할 수 없으면 동적 계획법을 사용한다.)
    • 가능한 모든 답의 후보를 만드는 과정을 여러 개의 선택으로 나눈다.
      • 각 선택은 답의 후보를 만드는 과정의 한 조각이 된다.
    • 그중 하나의 조각을 선택해 답의 일부를 만들고, 나머지 답을 재귀 호출을 통해 완성한다.
    • 조각이 하나밖에 남지 않은 경우, 혹은 하나도 남지 않은 경우에는 답을 생성했으므로, 이것을 기저 사례로 선택해 처리한다
  • 풀이할 때 중요한 점은 손으로 경우의 수를 계산하여 실제 답의 수의 상한을 예측해보는 것이다.
  • 중복을 세는 문제를 조심해라

풀이한 문제는 총 4개로 BOGGLE, PICNIC, BOARDCOVER ,CLOCKSYNC이다.

모든 문제는 C#으로 풀이했으며 책의 수도코드와 다른 형태를 가진다.

BOGGLE

PICNIC

BOARDCOVER

CLOCKSYNC

3MatchPuzzle

책에는 없는 문제로 프로젝트에 적용된 코드이다.

혹시 수정되면 좋은 부분이 있다면 알려주시면 감사합니다.

@fkdl0048 fkdl0048 self-assigned this Dec 7, 2023
@fkdl0048 fkdl0048 added this to Todo Dec 7, 2023
@github-project-automation github-project-automation bot moved this to Todo in Todo Dec 7, 2023
@fkdl0048 fkdl0048 moved this from Todo to Two-Week Plan in Todo Dec 7, 2023
@fkdl0048
Copy link
Owner Author

  • 1번 문제 보글 해결

@fkdl0048 fkdl0048 moved this from Two-Week Plan to In Progress in Todo Dec 22, 2023
@fkdl0048
Copy link
Owner Author

@github-project-automation github-project-automation bot moved this from In Progress to Done in Todo Jan 12, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Archived in project
Development

No branches or pull requests

1 participant