21년 1월 13일

한 일

  • 오늘은 하루종일 알고리즘만 풀었다.
  • 릿코드 문제:
    1. two-sum
    2. Reverse Integer
      • StringBuilder를 이용하여 풀었는데, 다른 풀이가 훨씬 간단했다.
      • 다른 풀이에서는 Integer 자체를 가지고 %와 /를 사용하여 reverse Integer를 구했다.
      • 음수 나머지 연산도 -가 붙을 뿐 아예 똑같다는 것을 기억하자
        • -9 % 2 = -1, -20 % 3 = -2
    3. Remove Duplicates from sorted list
    4. Palindrome number
    5. Longest common prefix
      • Suffix Array를 통해 LCD를 구하는 건지 잘못알고 엄청 공부했다.
      • Suffix Array를 통해 구하는 문제가 아니었다.
      • Suffix Array를 검색하여 딱 개념만 겨우 이해했다.
    6. Linked List cycle
      • Cycle을 검사하는데 공간복잡도가 O(1)으로 풀 수 있다는 걸 처음 알았다.
        1. linked list에서 한칸씩 이동하는 slow와 두칸씩 이동하는 fast가 같은 지점에서 출발한다고 가정하자.
        2. linked list가 cycle이 형성되어 있다면 slow와 fast는 언젠가 무조건 만난다.
  • 프로그래머스 문제:
    1. 소수찾기
      • 예전에 풀었던 완전탐색 문제인데, permutation 알고리즘이 필요한 문제이다.
      • STL엔 next_permutation함수가 있어서 쉽게 풀었었는데, Java엔 순열 함수가 없어서 직접 구현하여 풀었다.
  • Permutation 알고리즘 포스팅하였다.

잘못한 것

  • 선택과 집중을 잘 못하는 것 같다.
  • Suffix Array가 지금 당장 나에게 중요한 알고리즘이 아닌데도 이해해보겠다고 많은 시간을 썼고 지쳤다.

잘한 것

  • 드디어 Permutation 알고리즘을 이해하고 찜찜함을 풀었다. (원래 permutation은 STL에 의존하다 보니 찜찜했다.)

느낌

  • 그냥 알고리즘은 자바로 풀기로 정했다. 그만 방황하고 알고리즘 테스트를 열심히 준비하자
  • 코드스쿼드 Java 백엔드 과정에 대한 학습 목표를 봤는데, 저 목표를 모두 이룰 수 있을까 걱정이 됐다.
  • 5시~7시까지 자신이 없어지고 집중이 안되서 낮잠을 잤다.
  • 쫄지말자 꾸준히 하면 언젠가 할 수 있겠지

할 일

  • 코드스쿼드 미션 진행
  • 프로그래머스 알고리즘 풀기
  • 자바의정석 읽기