[TIL] 2월 4일

yeon·2021년 2월 4일
0

이코테 정렬 알고리즘

게임 개발(118p)

구현하다가 어려운거 같아서 동빈님 코드 참고했다.

방향값에 해당하는 숫자를 dx, dy 배열의 인덱스로 사용하면 된다는 것을 생각 못했다.

복잡해서 일단 나중에 다시 풀기..


자바의정석 11장 컬렉션 프레임워크

TreeSet

이진트리(binary tree)

  • 링크드리스트처럼 여러개의 노드가 연결된 구조
  • 모든 노드가 최대2개의 하위 노드를 가짐(0~2개)

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8faf62d8-e786-4250-a5e0-d284e9e1d3b2/_2021-02-04__5.38.41.png

TreeSet

  • Set인터페이스를 구현해서 데이터 중복 허용x. 저장순서 유지 x.(이진검색트리는 정렬을 함)

  • 이진탐색트리(binary search tree) 자료구조 형태의 컬렉션클래스

    • 이진탐색트리 : 부모노드보다 작은 값을 왼쪽에, 큰값을 오른쪽에 저장하는 이진 트리
  • 이진탐색트리 장점

    • 범위 검색(탐색)과 정렬에 유리
  • 단점

    • 노드의 추가, 삭제에 시간이 걸린다.

      → 요소를 하나 저장할때마다 root부터 부모보다 큰지 작은지 비교하기때문에

  • 생성자 TreeSet(Comparator comp) : 정렬 기준 제공하는 생성자

  • 메서드 640p 참고

  • 예제 1 - TreeSet은 저절로 정렬해서 저장한다!

    public class TreeSetLotto {
        public static void main(String[] args) {
            Set set = new TreeSet();
    
            for (int i = 0; set.size() < 6; i++) {
                int num = (int) (Math.random() * 45) + 1;
                set.add(num);
            }
            System.out.println(set);
        }
    }
    
    </> 실행 결과
    [9, 13, 16, 23, 26, 34]
  • 예제2 - subSet(from, to) 예시 (범위검색)

    public class TreeSetEx1 {
        public static void main(String[] args) {
            TreeSet set = new TreeSet();
    
            String from = "b";
            String to = "d";
    
            set.add("abc");
            set.add("bat");
            set.add("car");
            set.add("dance");
            set.add("flower");
    
            System.out.println(set);
            System.out.println(set.subSet(from,to));
        }
    }
    
    </> 실행 결과
    [abc, bat, car, dance, flower]
    [bat, car]
  • 예제3 - headSet() : 미만, tailSet() : 이상 예시 (인자를 기준으로 작은 요소, 큰 요소의 객체 얻는 메서드)

    public class TreeSetEx2 {
        public static void main(String[] args) {
            int[] score = {80, 95, 50, 35, 45, 65, 10, 100};
            TreeSet set = new TreeSet();
    
            for (int i = 0; i < score.length; i++) {
                set.add(score[i]);
            }
            System.out.println("50보다 작은 값 : " + set.headSet(50));
            System.out.println("50보다 큰 값 : " + set.tailSet(50));
        }
    }
    
    </> 실행 결과
    50보다 작은 값 : [10, 35, 45]
    50보다 큰 값 : [50, 65, 80, 95, 100]

오늘 한일

  • 자바의 정석 TreeSet, 9장 java.lang패키지와 유용한 클래스 파트 강의 시청했으나 아는 내용들이여서 노트정리 안함
  • 이코테 정렬파트 게임개발 알고리즘 학습하다가 이해하는데 너무 오래걸려서 일단 보류. 이런 문제들은 다음에 보면 금방 이해되는 경우가 많아서 스킵했다. 다음에 다시 해봐야지
  • 인프런 HTTP 강의 수강
    • URI? URN과 URL을 포함한 것 URN은 거의 쓰지 않음, URL은 리소스가 있는 위치를 지정한 것
    • 웹브라우저 요청 흐름 : 웹브라우저가 HTTP request 메시지를 생성하고, socket을 통해 전달, TCP 3 way handshake로 접속 요청, 수락을 통해 연결을 확인, HTTP request 메시지를 포함해서 TCP/IP 패킷을 생성해서 서버로 보낸다.
  • 이코테를 더 공부했으면 좋았을텐데 아쉽다. 그래도 오늘 하려고 한 것들은 다 한듯

Todo

  • (내일)
    • 미션 마저 구현
    • 자바의 정석 String 클래스부터, 11장도 학습

0개의 댓글