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할 때 오류나는 문제 해결에 대하여 정리하였다.
-
프로그래머스 경주로건설 문제를 풀었다.
-
정말 까다로운 문제였다. BFS처럼 풀지만 Queue대신 PriorityQueue(최소 Cost 우선하도록)를 사용해야 했다.
-
Visit Check를 Queue에 넣을때 하는게 효율적이라고 생각하기 쉽지만, 이 문제에서는 Queue에서 꺼낼때 Visit Check를 해야만 한다.
- 한번 Visit Check 해버리면 후발주자가 해당 자리에 위치할 수 없기 때문이다.
- Priority Queue에서 먼저 꺼내져도 코너이냐 직선이냐에 따라 cost가 +600이 될 수도, +100이 될 수도 있기 때문이다.
- cost가 100이지만 다음에 +600이 되버린게 add되며 그 자리를 visit해린다면,
- cost가 200이지만 다음에 +100이 되는 최소값이 그 자리에 visit할수 없게 되버린다.
-
visit check도 현재 위치에 veritcal로 방문했는지 horizontal로 방문했는지를 구분해야한다.
(이 부분은 예외 딱 1개 발생해서 발견하는데 애먹었다. ㅠㅠ)
- vertical로 방문했을땐 다음 위치로 가기 위해 +600이 되고, horziontal로 방문했을 때 다음 위치로 가기 위해 +100이 되는 경우가 있다고 가정해보자.
- vertical로 방문했을 때가 제일 최소값이라 Queue에서 빼며 Visit Check해버린다.
- 뒤이어 horizontal로 방문했을땐 이미 visit check가 되어있다.
- 그러나 다음 위치 입장에서는 horiziontal로 방문했을 때 +100이 되어 자신에게 오는 경우가 최소값인 경우도 존재한다.
- 따라서 visit check는 horziontal과 vertical을 구분해야 한다.
-
-
자바의 정석 Enum 부분을 읽었다.
잘못한 것
잘한 것
- 재충전 후 성공적으로 계획한 공부를 할 수 있었다.
느낌
- Git을 미리 사용하고 개념을 익혀놓은 보람이 있다.
- 알고리즘 맨날 푸니까 아예 새로운 개념이 아니면 풀이가 잘 떠오르는 거 같아서 좋다.
할 일
- 코드스쿼드 미션하기
- 자바의 정석 읽기
- 프로그래머스 문제 풀기