Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

공부 기록들

개인적인 알고리즘 문제 풀이 팁 기록

2020. 11. 12. 14:25

투 포인터

두 점을 이동하면서 하는 알고리즘인데, n^2 형식으로 나오면 별로 좋지않다. 

두 점을 어떻게 잡고 시작하느냐가 포인트인데 증가와 감소가 이루어 질 수 있도록 잡아야 한다.

1 2 3 4   배열이 있고 해당 배열의 각 2개를 뽑아서 더해서 m 값에 가깝도록 한다고 하면 왼쪽 점을 1 오른쪽 점을 4에 두고 시작하게 되면 왼쪽 점을 올리면 더한 값의 증가가 이루어지고, 오른쪽 점을 내리면 더한 값의 감소가 이루어질 것이다. 

그런데 만약 덧셈이 아니라 뺀 값이 m에 가깝도록 한다면?? 기존과 같이 왼쪽 점을 1 오른쪽 점을 4에 둔다면 왼쪽점을 증가시키면 뺀 값의 감소가 이루어지고 오른쪽 점을 감소시켜도 뺀 값의 감소가 이루어 질것이다. 

이럴 때에는 한 쪽에 두 점을 같이 놔야한다. 왼쪽 점을 1 오른쪽 점을 2로 두면 오른쪽 점을 올리면 뺀 값의 결과가 증가할 것이고 왼쪽 점을 올리면 뺀 값의 결과가 감소할 것이다. 이렇게, 두 점의 배치를 증감이 적절히 이루어지도록 잘 배치하는 것이 포인트이다.

 

트리

Tree, Node 이 2개의 클래스를 구현해서 사용해버림. preOrder, postOrder, inOrder 등은 재귀적으로 짬. 아 Tree에 Node 추가하는 부분 또한 재귀적으로 짜면 된다. dfs와 엮어서 나오는 문제가 많다.

ArrayList로 구현해야하는지도 고려해보아야함. 역으로 올라가고 뭐 그런식으로 이동하고 그런 문제면 ArrayList가 편함.

만약 이진트리이고 부모와 자식의 관계가 확실하면 Tree를 구현해서 하는 것이 좋은 것 같다. 하지만 지금까지 겪은거로는 ArrayList를 이용한 문제해결이 더 많았다.

 

분할 정복

분할 정복은 그림을 일단 크게 봐야되는 것 같다. 만약 4개로 나누는거면 해당 4개의 재귀를 보낼 수 있게끔 너무 큰 케이스면 생각하기가 어려우니깐 가장 작은 케이스에서 그 다음 케이스를 생각해서 짜면 더 쉽게 짜지는 것 같다. 그리고 기준 점을 보통 나뉘는 구간의 시작 점으로 두는 것이 일반적인 것 같다.

'공부 기록들' 카테고리의 다른 글

알고리즘 모아보기  (0) 2021.09.05
기타 등등(계속 추가)  (1) 2021.05.07
웹 캐싱 기법  (0) 2020.10.25
디스크 관리  (0) 2020.10.25
가상 메모리  (0) 2020.10.25
    '공부 기록들' 카테고리의 다른 글
    • 알고리즘 모아보기
    • 기타 등등(계속 추가)
    • 웹 캐싱 기법
    • 디스크 관리
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바