21년 2월 8일

한 일

  • 체스게임 만들기 구현을 시작하였다.
  • Git에 대한 기본개념을 복습하였다.
    • pull, fetch, merge, push, add, commit, rebase, revert, cherry-pick 등
    • remote repository, local repository, staging area, working directory 등
    • branch는 commit의 참조변수이다.
    • commit은 변경사항이 아니라 그 당시 파일들의 snap shot이다.
    • HEAD는 working directory가 위치하는 commit 또는 branch를 가리킨다.
  • Gradle이 무엇인지 검색하여 적어보았다.
  • Gradle 3.4.1버전에서 JUnit 5로 Test할 때 오류나는 문제 해결에 대하여 정리하였다.


  • 프로그래머스 경주로건설 문제를 풀었다.

    1. 정말 까다로운 문제였다. BFS처럼 풀지만 Queue대신 PriorityQueue(최소 Cost 우선하도록)를 사용해야 했다.

    2. Visit Check를 Queue에 넣을때 하는게 효율적이라고 생각하기 쉽지만, 이 문제에서는 Queue에서 꺼낼때 Visit Check를 해야만 한다.

      1. 한번 Visit Check 해버리면 후발주자가 해당 자리에 위치할 수 없기 때문이다.
    3. Priority Queue에서 먼저 꺼내져도 코너이냐 직선이냐에 따라 cost가 +600이 될 수도, +100이 될 수도 있기 때문이다.
      1. cost가 100이지만 다음에 +600이 되버린게 add되며 그 자리를 visit해린다면,
      2. cost가 200이지만 다음에 +100이 되는 최소값이 그 자리에 visit할수 없게 되버린다.
    4. visit check도 현재 위치에 veritcal로 방문했는지 horizontal로 방문했는지를 구분해야한다.

      (이 부분은 예외 딱 1개 발생해서 발견하는데 애먹었다. ㅠㅠ)

      1. vertical로 방문했을땐 다음 위치로 가기 위해 +600이 되고, horziontal로 방문했을 때 다음 위치로 가기 위해 +100이 되는 경우가 있다고 가정해보자.
      2. vertical로 방문했을 때가 제일 최소값이라 Queue에서 빼며 Visit Check해버린다.
      3. 뒤이어 horizontal로 방문했을땐 이미 visit check가 되어있다.
      4. 그러나 다음 위치 입장에서는 horiziontal로 방문했을 때 +100이 되어 자신에게 오는 경우가 최소값인 경우도 존재한다.
      5. 따라서 visit check는 horziontal과 vertical을 구분해야 한다.
  • 자바의 정석 Enum 부분을 읽었다.

잘못한 것

잘한 것

  • 재충전 후 성공적으로 계획한 공부를 할 수 있었다.

느낌

  • Git을 미리 사용하고 개념을 익혀놓은 보람이 있다.
  • 알고리즘 맨날 푸니까 아예 새로운 개념이 아니면 풀이가 잘 떠오르는 거 같아서 좋다.

할 일

  • 코드스쿼드 미션하기
  • 자바의 정석 읽기
  • 프로그래머스 문제 풀기