~23-07-16 WIL

more·2023년 7월 16일
0

배운 점

  • getOrDefault(Object key, V DefaultValue)
    • 반환 값 : 찾는 key가 존재하면 해당 key에 매핑되어 있는 값을 반환하고, 그렇지 않으면 디폴트 값이 반환
  • map.keySet().stream().collect(Collectors.toList());
    • map의 값들을 List로 변환해서 할당
  • 이분 탐색 (백준 참고)
    • 결정 문제(Decision Problem)의 답이 이분적일 때 사용할 수 있는 탐색 기법
      -> 결정 문제란 답이 Yes or No인 문제를 의미하며 (이분 탐색 문제에서는) 보통 1개의 parameter를 가진다.
      -> 결정 문제의 답이 두 구간으로 나뉘는 것을 "이분적이다"라고 하며 이런 경우 이분 탐색을 사용해 결정 문제의 답이 달라지는 경계를 찾을 수 있다.
    • 경계를 포함하는 구간 [lo, hi]을 잡은 뒤 구간의 길이를 절반씩 줄여나가며 lo, hi이 경계 지점에 위치하도록 하는 것
      -> 구간의 범위가 클 때 특히 효과적
      많은 최적화 문제는 이분 탐색으로 풀 수 있다.
      -> 최적화 문제란 어떤 조건(Check(x))을 만족하는 x의 최댓값 또는 최솟값을 찾는 문제
      구현 방법
    • Check(lo) != Check(hi)가 되도록 lo, hi의 초기값을 잘 설정
    • lo + 1 < hi인 동안 mid = (lo + hi) / 2를 구함
    • Check(lo) == Check(mid)라면 lo = mid를, Check(hi) == Check(mid)라면 hi = mid
      lo + 1 == high 가 되면 탈출
  • 슬라이딩 윈도우
    • 창문을 열고 닫듯이 (미닫이 방식) 배열의 값을 하나씩 옮기는 방식
    • 예를 들어 크기가 5인 배열에서 순서대로 3개 배열의 합을 구하고자 한다면 0 + 1 + 2 -> 1 + 2 + 3의 순서대로 합들이 생겨날 텐데, 이때 2번째 배열은 arr[0]을 빼고 arr[next]를 더한 것과 같다.
  • custom annotation
    • 어노테이션은 다음과 같이 인터페이스 앞에 @를 붙여서 생성할 수 있다.
    • Target: 해당 어노테이션이 사용되는 위치를 결정
      -> ElementType.TYPE_PARAMETER로 지정했으니 매개 변수 타입 선언시 사용하겠다.
      -> METHOD, CLASS등의 다양한 방식이 존재한다.
    • Retention: 해당 어노테이션의 정보를 어느 범위까지 유지할 것인지
      -> RetentionPolicy.RUNTIME을 사용해서 런타임시 계속 사용하겠다.
  • XOR 연산
    • 배타적 논리합(exclusive OR)
    • 두 개의 피연산자 중 하나만이 1일 때 1을 반환
    • 기호 : ^ => A ^ B

느낀 점

  • 우선은 제발 건강했으면 좋겠다. 조금 조금씩 운동을 해나가야겠다...
  • 공부시간도 조금 늘리는 방향으로 잡아야겠다.
    - 공부를 집중할 수 있는 기간이 짧아서 차라리 휴식을 잡고 시간을 늘리는 방식으로 해야겠다.

0개의 댓글