JAVA/자료구조 28

remove와 find

들어가기 전에 임의의 위치의 노드를 제거하는 remove와 노드를 찾는 find에 대해 살펴보도록 하겠습니다. 학습 목표 연결 리스트에서 노드의 remove, find 함수를 만드는 방법을 이해할 수 있습니다. 핵심 단어 연결 리스트 Comparable 인터페이스 경계 조건 find Comparable 인터페이스를 사용하여 노드를 찾습니다. remove 1. Comparable 인터페이스를 사용하여 제거하고 싶은 요소의 위치를 찾습니다. 2. 바로 앞 노드의 next 포인터가 다음 노드를 가리키게 만들어 가운데 노드를 제거합니다. previous, current의 2가지 포인터를 사용하여 각각 바로 앞의 노드와 제거하고자 하는 노드를 가리키게 합니다. 노드가 1개만 있는 경우, 첫 번째 노드를 제거하는 ..

JAVA/자료구조 2021.10.13

removeLast 메소드

들어가기 전에 연결 리스트의 마지막 node를 제거하는 removeLast 메소드에 대해 살펴보도록 하겠습니다. 학습 목표 removeLast 메소드를 이해하고 경계 조건을 만족하는지 확인할 수 있습니다. 핵심 단어 removeLast 메소드 연결 리스트 경계 조건 removeLast 메소드 마지막 노드를 마지막에서 2번째 노드로 옮겨 연결리스트의 마지막 노드를 제거합니다. 단일 연결 리스트이기 때문에 2번째 노드를 찾으려면 head에서부터 시작해야 합니다. 임시 포인터 current와 previous를 활용하여 마지막에서 2번째 노드를 찾을 수 있습니다. current는 현재 위치를 가리키는 포인터이고 previous는 이전 위치를 가리키는 포인터입니다. current 포인터가 tail과 같으면 pre..

JAVA/자료구조 2021.10.13

removeFirst 메소드

들어가기 전에 연결 리스트의 첫 node를 제거하는 removeFirst 메소드에 대해 살펴보도록 하겠습니다. 학습 목표 removeFirst 메소드를 이해하고 경계 조건을 만족하는지 확인할 수 있습니다. 핵심 단어 removeFirst 메소드 연결 리스트 경계 조건 removeFirst 메소드 보통의 경우, head=head.next를 하면 head가 다음 노드를 가리키게 되고 첫 번째 노드가 제거됩니다. 하지만 다음과 같은 경계 조건에서 에러가 발생하므로 코드를 추가해야 합니다. 경계 조건 1. 자료 구조가 비어있는 경우 head가 null을 가리키는 경우입니다. 이 때, head가 head.next를 가리키게 하면 NullPointerException 에러가 발생하게 됩니다. 그래서 이 상황에서는 ..

JAVA/자료구조 2021.10.12

addLast 메소드

들어가기 전에 연결 리스트의 마지막에 node를 추가하는 addLast 메소드에 대해 살펴보도록 하겠습니다. 학습 목표 addLast 메소드를 이해하고 경계 조건을 만족하는지 확인할 수 있습니다. 핵심 단어 addLast 메소드 연결 리스트 경계 조건 시간 복잡도 addLast 메소드 addLast 메소드에서는 연결 리스트의 마지막을 가리키는 임시 포인터를 사용합니다. 연결 리스트의 요소를 확인하려면 무조건 head에서 시작해야 하는데, 연결 리스트의 마지막까지 도달하는 데 next를 너무 많이 사용해야 하기 때문입니다. 그리고 연결 리스트의 마지막 노드는 유일하게 next 포인터가 null을 가리키기 때문에, 아래 코드와 같이 addLast 메소드를 작성할 수 있습니다. 문제 1. 경계 조건 head가..

JAVA/자료구조 2021.10.03

addFirst 메소드

들어가기 전에 연결 리스트의 앞부분에 node를 추가하는 addFirst 메소드에 대해 살펴보도록 하겠습니다. 학습 목표 addFirst 메소드를 이해하고 경계 조건을 만족하는지 확인할 수 있습니다. 핵심 단어 addFirst 메소드 연결 리스트 경계 조건 시간 복잡도 addFirst 메소드 새로운 node를 연결 리스트의 앞부분에 추가하는 방법은 다음과 같습니다. 1. 새로운 node를 만든다. 2. 새로운 node의 next가 현재 head를 가리키도록 한다. 3. head 포인터가 다시 새로운 노드를 가리키도록 한다. 이 과정을 코드로 작성하면 다음과 같습니다.} 위 코드는 5가지 경계 조건에 대하여 생각하였을 때에도 문제가 없습니다. 그리고 새로운 요소를 추가하기 위해 뒷부분을 살펴볼 필요가 없기..

JAVA/자료구조 2021.10.03

경계 조건

들어가기 전에 지금까지 연결 리스트의 정의에 관해 공부하였습니다. 연결 리스트를 문제없이 사용하려면 어떤 경우를 고려해야 할까요? 고려해야 하는 경계 조건에 대해 살펴보도록 하겠습니다. 학습 목표 자료 구조의 경계 조건을 이해할 수 있습니다. 핵심 단어 경계 조건 경계 조건 Boundary Conditions - Empty data structure - Single element in the data structure - Adding / removing beginning of data structure - Adding / removing end of the data structure - Working in the middle 어떤 자료 구조든 아래의 경계 조건에서 문제가 생기진 않을지 생각해봐야 합니다...

JAVA/자료구조 2021.10.02

노드와 크기

들어가기 전에 연결 리스트의 구성 요소인 노드를 정의하는 방법에 대해 살펴보도록 하겠습니다. 학습 목표 노드를 정의하고 노드의 개수를 효율적으로 세는 방법을 설명할 수 있습니다. 핵심 단어 노드 시간 복잡도 노드와 크기 위 코드는 연결 리스트의 내부 클래스에서 노드를 정의한 내용입니다. 노드는 next라는 포인터와 data를 가집니다. data의 자료형은 E입니다. E는 정해지지 않은 자료형이고 이렇게 구현한 연결 리스트를 사용하면 그때 지정하겠다는 의미입니다. 그리고 next의 타입은 Node입니다. 다른 노드를 가리키는 포인터이기 때문입니다. 생성자까지 추가하여 코드를 적으면 노드 객체가 완성됩니다. 생성자에서는 객체를 data에 저장하고 next는 우선 null로 지정합니다. 이 노드 객체는 내부 ..

JAVA/자료구조 2021.10.02

연결 리스트

들어가기 전에 순차적인 데이터나 많은 양의 데이터를 정리하는 자료 구조인 연결 리스트에 대해 살펴보도록 하겠습니다. 학습 목표 연결 리스트의 정의와 그 구성 요소에 대해 설명할 수 있습니다. 핵심 단어 연결 리스트 노드 배열 연결 리스트 포인터를 사용하여 여러 개의 노드를 연결하는 자료 구조를 연결 리스트라고 합니다. 연결 리스트의 기본 구성 요소는 노드입니다. 노드에는 두 가지 정보가 들어있습니다. 첫 번째는 인접한 노드를 가리키는 next라는 이름의 포인터, 두 번째는 우리가 노드에 넣는 데이터를 가리키는 포인터입니다. (노드 D의 경우, 다음에 아무것도 없기 때문에 null을 가리킵니다) 이 리스트는 head라는 이름의 포인터에서 시작합니다. Head는 리스트의 첫 번째 노드를 가리킵니다. 힙에서는..

JAVA/자료구조 2021.10.02

예외

들어가기 전에 Java에서 예외를 설정하는 방법에 대해 알아보도록 하겠습니다. 학습 목표 프로그래밍할 때, 특정 상황을 예외 처리하는 방법을 이해할 수 있습니다. 핵심 단어 예외 상속 예외 상황 설정하기 위 코드에서와 같이 Exception 클래스를 상속받고 생성자를 만든 후, 생성자 안에서 super를 호출하면 예외 상황에 대한 클래스를 만들 수 있습니다. (super는 만약 어떤 것을 상속받았을 때 상속받은 클래스의 생성자를 호출한다는 의미입니다.) 이후 예외 상황이 발생하였을 때 throw를 사용하면, 그 예외 상황의 이름으로 에러가 발생하게 됩니다. 생각해보기 1) 예외 상황의 이름을 적절하게 설정하는 게 프로그래밍하는 데에 어떤 도움이 될까요? 나의 생각 : 어디에 어떤 에러가 발생했는지 쉽게 ..

JAVA/자료구조 2021.10.02

Autoboxing

들어가기 전에 기본 자료형을 객체의 형태로 바꾸어주는 Autoboxing에 대해 알아봅니다. 학습 목표 Autoboxing을 설명할 수 있습니다. 핵심 단어 기본 자료형과 래퍼 클래스 Autoboxing Autoboxing byte, short, int, char 등의 기본 자료형에 대해서 Java 가상 머신은 정확하게 필요한 만큼의 메모리를 할당합니다. 하지만 객체에 대해서는 이 객체를 가리키는 4바이트짜리 포인터와 힙의 공간을 할당합니다. 따라서 기본 자료형은 객체가 아니고 이것들은 객체 메소드를 상속받지 않습니다. 하지만 Java에는 기본 자료형뿐만 아니라 래퍼 클래스(Wrapper Class)가 존재합니다. 래퍼 클래스는 객체 버전의 기본 자료형입니다. byte는 Byte, short는 Short..

JAVA/자료구조 2021.10.02