TIL

TIL_20230309

번잔중 2023. 3. 9. 23:20

오늘 할 일

  • LeetCode 데일리 문제 풀기
  • Heart
    • 토큰 재발행 기능 수정 - 마이페이지에서 생기는 부분인지 확인 필요
    • 토큰 만료시 출력되는 예외 처리 로그 확인하기
    • OAuth2 로그인 실패시 생기는 예외 처리의 description 수정

오늘 배운 것

LeetCode 데일리 문제 풀기

  • 오늘의 문제: 142. Linked List Cycle II(https://leetcode.com/problems/linked-list-cycle-ii/)
  • 문제 조건
    • 연결리스트의 헤드가 주어지면 사이클이 시작되는 지점의 노드를 반환해야 한다. 만약 사이클이 없다면 null을 반환한다.
    • 목록에 다음 포인터를 계속 따라가다보면 다시 연결할 수 있는 노드가 있고 연결된 목록에 주기가 있다. 내부적으로 pos는 테일의 다음 포인터가 연결된 노드의 인덱스(0 인덱스)를 나타내는 데 사용된다. 주기가 없으면 -1이다. pos는 매개 변수로 전달되지 않는다.
  • 문제 해결
    • 첫 번째 방법은 리스트를 사용하기 때문에 시간복잡도나 공간 복잡도가 썩 좋은 편은 아니다.
    • head에 있는 node들을 하나씩 리스트에 집어넣으면서 순회할 때, node가 존재한다면 cycle이 존재하는 것이므로 while문을 빠져나와서 해당 노드가 존재하는 인덱스에 있는 node를 리턴한다.
    • 만약 node가 null이거나 다음 node가 null이면 null을 리턴한다.
    • node를 ListNode 형태로 리스트에 추가하면 각 노드의 주소값이 저장되기 때문에 val가 같다고 하더라도 주소값으로 노드의 위치를 찾을 수 있기 때문에 정상 동작한다.
    • 두 번째 방법으로는 Floyd's Cycle Detection Algorithm(또는 토끼와 거북이 알고리즘)을 이용하기 때문에 O(n)의 시간복잡도를 가지는 알고리즘이다.
    • 한 칸씩 움직이는 turtle과 두 칸씩 움직이는 rabbit을 두어 cycle이 존재하는지 찾아본다. cycle이 존재한다면 turtle과 rabbit이 만나는 순간이 생기고, cycle이 존재하지 않는다면 node나 node.next 값이 null인 경우가 생긴다.
    • cycle이 존재함을 확인하면 turtle을 다시 시작점으로 옮기고 이번에는 turtle과 rabbit을 한 칸씩 이동시켜 만나게 되는 지점이 사이클의 시작점이다. 그 이유는 cycle 내에 특정 위치에 있는 rabbit으로부터 cycle 방향대로 이동한 거리와 head에서부터 cycle의 시작점에 도달하는 거리가 같기 때문이다.
 

GitHub - chaning49/LeetCode

Contribute to chaning49/LeetCode development by creating an account on GitHub.

github.com

Heart

  • 토큰 재발행 기능 수정 - 마이페이지에서 생기는 부분인지 확인 필요
    • 현재 테스트를 위해 refresh token으로 사용자 권한을 검증하고 있기 때문에 access token의 만료 시간으로는 제어가 불가능하다. → 추후 access token을 사용한 사용자 권한 검증 방식으로 수정 필요함
  • 토큰 만료시 출력되는 예외 처리 로그 확인하기
    • 상동
  • OAuth2 로그인 실패시 생기는 예외 처리의 description 수정
    • 따로 구현해놓은 부분이 있어서 동작 확인이 필요함
  •  

느낀점

  • 리트코드 문제에서 단일 연결리스트가 나와서 오랜만에 과거 기억을 끄집어냈습니다. 자료구조 수업에서 배운 내용을 제가 코드로 직접 해본 것이 몇 년만인지 모르겠지만 문제 해결에 대한 새로운 아이디어를 얻게 된 기분이라 좋습니다.
  • 인증, 인가 관련된 부분은 아직도 헷갈립니다. 조금 더 잘하고 싶은데 레퍼런스를 어디서 얻어야 할지 고민됩니다. 책을 얼른 사볼까 싶기도 해요.

내일 할 일

  • LeetCode 데일리 문제 풀기
  • 알바 면접(선릉역)

'TIL' 카테고리의 다른 글

TIL_20230311  (0) 2023.03.11
TIL_20230310  (1) 2023.03.10
TIL_20230308  (0) 2023.03.08
TIL_20230307  (0) 2023.03.07
TIL_20230306  (0) 2023.03.06