[TIL] 2020/09/16

yongkini ·2020년 9월 16일
0

Today I Learned

목록 보기
34/176

Today, I Will Learn


  • HA test 풀기
  • HA test 오답 풀이 및 정리
  • nRooks, nQueens 재도저~언!

Today, I Learned


  • HA test 풀기(clear) :
    => HA라서 긴장했는데, 여태까지 한 스프린트에 대한 복습 차원에서 굉장히 좋은 시험이였다고 생각됐다. circular queue를 저번에 구현해봤는데, 또 해보려고 하니까 바로 안됐다. 하지만, 다시 한번 복습해서 더욱 좋았다. 제일 헤맸던 문제는 tree map 문제. 사실, 마지막에 풀어서 집중력이 저하됐던 것이 가장 큰 원인이였다. 나이가 28살인데, 아직도 집중력이 안좋다는 것이 나도 신기하지만.. 별거있나 노력해야지. 집중력을 키우는 것도 실력을 키우는 것과 같다. 노력하자.
  • HA test 오답 풀이 및 정리(clear) :
    • 오답은 아니지만 매일 보는 영어 단어인데 매일 모르는 단어가 있어서 적어둔다 => Optimization : 최적화
    • O(logN)에 대하여 : 항상 logN만 나오면 불안했는데, 생각해보니 별거없었다..ㅎㅎ. 매우 친근한 예시를 통해 쉽게 이해됐는데, 술게임으로 유명한 병뚜껑 업다운 게임을 생각해보면 쉬웠다. Binary Search Tree와 관련해서 생각해보면(즉, 정렬되어있다는 전제가 필요함), 병두껑 (1~50의 수가 적힌)에서 특정한 수를 조회하려면, 처음에는 50을 2로 나누고, 그 다음에는 25개를 2로 나누고, 그 다음에는 12.5를 2로 나누고...=> 하다보면, 결국 아무리 늦게 찾아도(worst case) logN의 시간복잡도를 갖게 되는 것이다(이 경우에는 50이니까 log32, log64의 사이 즉, 5,6번 사이가 된다). 더 쉽게 2의 n승의 예를 들면, 16개의 숫자 중에 특정 숫자를 찾는 방법은(정렬되어있다는 전제하에) log16 = 4, 즉, 최대 4번이다. 여기서 3을 찾는다고 해보자.
      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
      이 있을 때, 일단 정중앙에 있는 숫자를 찾는다. 16/2=8, 8? x. 다시 찾아보자. 대신 3은 8보다 작으니, 1,2,3,4,5,6,7 만 남겨두고 나머지는 고려하지 않는다. 이번에도 정중앙을 살펴본다. 7/2=3.5(3) 3? o. 2번만에 찾은 케이스이다. 이런식으로, logN의 케이스의 경우 계속해서 2로 나눠서 진행이 되기 때문에 logN이 가능한 것이다. (1~50까지인 업다운 게임이라면, log32,log64사이가 최대일 것이고, 즉, 5,6번사이!=> 한바퀴 돌기전에 끝나면 자신이 술을 먹어야하므로, 7명이 있는 술자리에서 병뚜껑 게임을 스스로 시작하지말자 알고리즘을 아는 사람이라면..ㅎ why? 무조건 내가 먹게 될테니까!)
    • 가위, 바위, 보를 '라운드 수=n'에 따라 가능한 모든 케이스를 찾는 시행을 할 때(중복조합), 1번하면, 가위, 바위, 보 순서대로 3개=> 2번하면, 가위,가위, 바위,바위, 이런식으로 3의 2승 => 결국 3의 n승이 돼서 EXPONENTIAL 이 된다. 즉, 지수함수 꼴로 기하급수적으로 증가하게 됨!.
    • 전반적으로, 알고리즘 복잡도 중에 logN을 푸는데 조금 시간을 썼고, 마지막 treeMap 문제에서 재귀함수를 구현할 때 중간에 재귀 로직을 따라가다가 스스로 멘붕이와서 쉬는 시간을 갖느라 시간이 걸렸다. 내가 나에게 하는 조언이지만, 재귀는 너무 멀리 내다보기보다는 첫 시행을 완벽하게 그렸을 때, 그 다음 시행이 첫 시행과 완벽하게 일치할 때 쓰면된다. 시험의 경우 억지로 재귀를 써야한다는 강박에 머리가 복잡하지만..ㅎㅎ
    • setTimeout에 관하여 : setTimeout에서 첫번째 매개변수로 주는 함수를 보통 bind를 써서 함수 자체를 주거나, this를 쓰는 경우가 아닐 때는 함수를 호출하지 않고, 함수 자체를 인자로 주는데, 만약 함수를 호출하는 형태로, 예를 들어,
      setTimeout(함수명(), 1000);
      형태로 주게되면, 1초뒤에 실행하지 않고, 즉, 이벤트 큐에 들어가서, 이벤트 루프에 의해서 제 때에 실행되는 것이 아니라 바로 콜스택에서 실행된다.
    • nQueens파트에서도 헷갈렸던 부분인데, 함수에 매개변수로 넣어주는 값은 만약에 그것이 넣기전에 하나의 변수였다고 해도, 예를 들어,
      let count =0;
            function x(count) {
      	count ++;
          	return count;
      	}
          console.log(count);
      이렇게 해준다고 해서 마지막에 console.log로 출력해주는 count변수가 1이되는 것이 아니라는 것!(그러나 function x의 리턴값은 1이다)
  • nRooks, nQueens 재도저~언!
    • nRooks Start : 19:45 ~ 20:40(55min) =>clear
      : 일단 푸는 것에 집중했고, 알고리즘 복잡도는 O(n의 n제곱)으로 만들었다.
    • nQueens start : 21:00 ~ 21:50(nQueens 사전 작업 완료)
      nQueens solvers start : 22:00 ~ 23:00(countNQueensSolutions만 clear)

Planning to Study


  • HA 객관식 문제 모르는 것 : 17번 질문하기
  • nQueens findNQueensSolution 마무리
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글