배운 내용

알고리즘

알고리즘 개론

알고리즘 잘 하는 사람?? → 구현 못할 건 없다. (느리거나 귀찮을 뿐)

게임 - 알고리즘 특화

 

원리 이해보다

추상화하기

  • 어떤 함수가 있을 때 → 뭘 해주는지만 이해하면 됨
  • 삽입 삭제 검색

현실 문제를 알고리즘으로 변환하는 연습하기 - 가장 중요!

 

유니티 정렬?

ex) Physics.RaycastAll 거리순 정렬

 

기초 알고리즘 로드맵

  • 대부분의 알고리즘은 의존성이 없다. → 무조건 순서에 따라 하지 말기 (수학은 의존성이 있음)
  • 제어구조(for, if), 재귀적으로 사고하기, 자료구조(스택, 큐, 힙), 수학(순열과 조합), 탐색(이진탐색, BFS, DFS), 메모라이제이션(동적 계획법), 그리디 - 패턴 인식하기(천재의 영역)
    • 이 이후에는 배우고 싶은, 필요한 알고리즘을 공부하면 된다.

 

시간복잡도 : 알고리즘이 가장 느리게 돌아갔을 때 걸리는 최악의 속도

  • 왜 중요할까?
    • 많은 시험들이 시간 복잡도를 계산할 수 있는지 물어보는 문제를 많이 냄
      • 이 문제를 해결할 수 있는 코드를 구현할 수 있는가? (구현 여부)
      • 이 문제를 효율적으로 해결할 수 있는 코드를 구현할 수 있는가? (효율성)
  • 시간복잡도만 계산해도 어떤 알고리즘을 사용할지 결정할 수 있음!
  • Big-O 노테이션으로 표기 ex) O(_)
    • 전체 N개의 데이터가 있을 때 N번돌면 O(N)이라고 표기
    • 일반적으로 빅 오 노테이션에는 상수를 표시하지 않는다.
      • 상수 몇 배수를 하는 것 정도로 Time Limit에 걸리도록 문제를 출제하지 않음
      • 같은 알고리즘의 구현 차이에 따른 변별력을 중요하게 생각하지 않기 때문
        • N개의 데이터가 있을 떄, O(5N^2) 번 돈다면 O(N^2)
    • 더 낮은 시간복잡도는 고려하지 않는다.
      • 문제를 푸는데 영향을 주지 않기 때문
        • O(N^2+N) = O(N^2)
  • 중요 Big-O의 N 크기
    • O(1) < O(logN) < O(N) < O(NlogN) < O(N^2) < O(2^N) < O(N!)

 

문제만보고 알고리즘 선택하기

  • 기본적으로 1초는 100000000(1억)번 연산 (C++기준)
    • 일반적으로 문제를 출제하는 사람들은 1초 안에 풀리는 문제를 제시
    • 조합하여 만들어지는 입력도 포함
  • 실무적으로 주어진 시간 안에 구현하기 편한 알고리즘을 사용하면 됨 (서비스 영향)

 

 

한 주 후기

 이번 주에는 알고리즘 특강과 베이직 코스 마무리 시험이 있었다.

 이번 주에 주강사님이 편찮으신 관계로 알고리즘 수업으로 대체가 되었는데 정말 유익한 수업이었다. 알고리즘을 푸는데 그냥 막 푸는 것이 아니라 알고리즘 문제가 어떤 문제인지(어떤 시간 복잡도를 가지고 있는지 -> 어떤 알고리즘으로 풀 수 있는 문제인지)부터 파악하는 접근에서 시작하는 것이 중요하다는 것을 배웠다. 그리고 알고리즘 로드맵을 따라가면서 익숙해지면 이후의 것들은 이 로드맵 안의 것들을 활용하는 부분이라고 하셔서 이 로드맵부터 공부할 것이다. 이후에 알고리즘마다 나만의 템플릿을 만들어서 이를 적용해보도록 해야겠다.

 또한 마무리 테스트 중 개발 테스트가 있었는데 알까기 어플을 역기획하여 따라 만들어보는 시간을 가졌다. 5일이라는 기간동안 핵심 기능들을 만들어 똑같이 동작하게 만드는 것이었는데 처음엔 어디서부터 시작해야할지 막막했던 것 같다. 이번엔 UI를 한 게임오브젝트로 묶어 Don'tDestroyOnLoad하는 방법을 사용했는데 코드 양이 550줄에 가까워져서 다음날 보면 내가 설정한 변수명이 뭐가 뭔지 헷갈리고 코드가 보기 어려운 경우가 자주 생기게 되었다. 이는 사람들이 왜 클래스를 기능별로 구분하는지를 깨닫는 경험이 되었고 다음에는 UI를 팝업UI 기본UI 등으로 분류하여 나누어 구현해야겠다는 생각이 들었다.

 이번 주로써 베이직코스가 마무리 되었다. 다들 열심히 했고 그에 따른 결과가 있었다고 생각한다. 또한 남은 프로젝트 기간을 준비하면서 협업과 객체지향 부분을 공부할 생각이다. 이제 내가 스스로 공부하고 만들어 가야할 때가 왔으니 더 힘들 수도 있겠지만 꾸준히 노력하여 결실을 맺었으면 좋겠다. 다음주도 파이팅!!

 

 

유데미코리아 바로가기

본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.

+ Recent posts