TIL 2022.03.02.수

1. 학습한 내용

백준 자료구조 문제 2605번
문제
내가 푼 코드

2. 알게 된 내용

  • 자바에서의 연결리스트 사용 방법
    • 선언 및 초기화

      LinkedList list = new LinkedList();//타입 미설정 Object로 선언된다.
      LinkedList<Integer> num = new LinkedList<Integer>();//타입설정 int타입만 사용가능

      위와 같이 LinkedList 타입을 선언하면서 초기화시킬 수 있다.

    • 데이터 추가

      list.add(1, 10);//index 1에 데이터 10 추가

      add() 메서드를 이용해 추가 가능하다. (addFirst(), addLast() 등도 있음)

    • 데이터 삭제

      list.remove(1); //index 1 제거
      list.clear(); //모든 값 제거

      remove()만 쓰면 0번 인덱스를 제거한다.
      removeFirst(), removeLast() 등의 메서드도 있다.

    • 연결리스트 크기 구하기

      System.out.println(list.size()); //list 크기 : 3

      size() 메서드를 이용해 연결리스트 길이를 구할 수 있다.

    • 가져오기/출력

      get(인덱스) 메서드를 이용해 해당 인덱스의 값을 빼올 수 있다.

    • 출처 : [Java] 자바 LinkedList 사용법 & 예제 총정리

  • ArrayList를 이용해 해결하는 방법
    더 알아본 결과 이 문제는 ArrayList를 이용해서도 해결이 가능하다.
  • 그러면 LinkedList와 ArrayList의 차이점은 무엇인가?
    LinkedList와 ArrayList의 차이점은 아래 사진과 같다.
    • ArrayList가 동적으로 동작하긴 하지만 엄연히 ArrayList는 배열이기 때문에 데이터를 삭제하거나 삽입할 때 그만큼 위치를 맞춰주어야 한다.
    • 반면 LinkedList는 데이터를 삭제하거나 삽입할 때 가리키고 있는 주소값만 변경해주면 되기 때문에 ArrayList에 비해 상당히 효율적이다.
    • 그러나 LinkedList는 ArrayList에 비해 검색 속도가 느린 편이다.
    • 출처 : ArrayList와 LinkedList의 차이

3. 느낀 점

평소와 같이 일반 배열로 작성했다가 뭔가 내 의도와 맞지 않게 굴러간다는 것을 깨달았다. 그러다 염치없지만 문제 아래쪽의 분류를 봤는데 (앞으로는 다 풀기 전에 미리 클릭하지 않겠습니다..) 연결리스트 라는.. 힌트를 얻게 되었다. 하지만 나는 자바에서 연결리스트를 어떻게 쓰는지 잘 모르고 있어서 검색을 했다. 여러 좋은 분들 덕분에 그동안 잊고 있었던.. ArrayList와 LinkedList를 다시 알아가게 되어서 감사하다. 다만 내가 문제 분류를 보고나서 잘 풀린거라.. 조금 아쉽긴 하다. 앞으로는 분류는 최대한 보지 않고 정 모르겠거나 마무리할 때 보도록 해야겠다.

좋은 웹페이지 즐겨찾기