
pg122 참조
ArrayList를 사용하기 위해서는 먼저 java.util 패키지를 import해야 합니다.
그리고 ArrayList 객체를 생성하고 원하는 데이터를 추가하거나 제거할 수 있습니다.
예를 들어, 다음과 같이 사용할 수 있습니다:
java
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// ArrayList 객체 생성
ArrayList<String> myList = new ArrayList<>();
// 데이터 추가
myList.add("사과");
myList.add("바나나");
myList.add("딸기");
// 데이터 접근
System.out.println(myList.get(0)); // "사과" 출력
// 데이터 제거
myList.remove(1); // "바나나" 제거
// 데이터 개수 확인
System.out.println(myList.size()); // 2 출력
}
}
위의 예시에서는 문자열을 저장하는 ArrayList를 생성하고,
add() 메서드를 사용하여 데이터를 추가하고,
get() 메서드를 사용하여 인덱스를 통해 데이터에 접근하였습니다.
또한, remove() 메서드를 사용하여 데이터를 제거하고,
size() 메서드를 사용하여 ArrayList의 크기를 확인하였습니다.
이와 같이 ArrayList는 유연한 데이터 관리를 위한 다양한 메서드를 제공합니다.
static 찾을 때 : class명.
heap 찾을 때 : heap.변수_이거아니고
객체.변수인거 같음-v

크기 찾는 법-v
1. 배열 : array 변수명.length
2. ArrayList : arrayList변수명.size( )
3. 문자열 : println(string변수명.length())
(문자열)생성
: ArrayList<String> list = new ArrayList<String>( );
컬렉션의 종류




스코프
스코프(scope)는 변수나 상수가 유효한 범위를 나타내는 개념입니다.
즉, 변수가 선언된 위치에 따라 해당 변수를 사용할 수 있는 범위를 결정합니다.
일반적으로 프로그래밍에서 스코프는 중괄호({})로 둘러싸인 코드 블록을 기준으로 정의됩니다.
코드 블록은 주로 함수, 메서드, 조건문, 반복문 등에서 사용됩니다.
스코프는 변수의 생명주기(lifetime)와 관련이 있습니다. 변수가 선언되는 시점에서부터
해당 스코프에 진입하고, 스코프를 벗어나면 변수는 소멸합니다.
예를 들어, 다음은 자바에서 스코프의 예시입니다:
java
public class Main {
public static void main(String[] args) {
int a = 10; // main 메서드 내에서 선언된 변수 a
if (a > 5) {
int b = 20; // if 문 블록 내에서 선언된 변수 b
System.out.println(a); // a 출력
System.out.println(b); // b 출력
}
System.out.println(a); // a 출력
System.out.println(b); // 오류!
변수 b는 if 문 블록 내에서만 유효하므로 접근할 수 없음
}
}
위의 예시에서는 변수 a와 b가 선언되었습니다.
변수 a는 main 메서드 내에서 선언되어 있으므로 main 메서드 내에서 유효한 스코프를 가지고 있습니다. 변수 b는 if 문 블록 내에서 선언되어 있으므로 if 문 블록 내에서 유효한 스코프를 가지고 있습니다.
따라서 b 변수는 if 문 블록 내에서만 사용할 수 있으며,
if 문 블록을 벗어나면 해당 변수에 접근할 수 없습니다.
이와 달리 a 변수는 main 메서드 전체에서 사용할 수 있습니다.
스코프의 개념은 변수의 유효 범위를 제한하여 변수 이름의 충돌을 방지하고,
메모리를 효율적으로 관리하기 위해 사용됩니다.
퀵솔트

물건을 크기 순으로 정렬하는 과정을 재귀적으로 수행한다는 것은 다음과 같이 이해할 수 있습니다.
우리가 정렬해야 할 물건들이 있다고 상상해봅시다. 이 물건들은 크기가 서로 다릅니다.
재귀적으로 수행하기 위해, 우리는 일단 하나의 물건을 선택하여 피벗으로 정합니다.
피벗은 중간 정도 크기의 물건으로 선택합니다.
선택한 피벗을 기준으로, 피벗보다 작은 크기의 물건들은 왼쪽으로,
피벗보다 큰 크기의 물건들은 오른쪽으로 옮깁니다. 이렇게 하면 피벗을 중심으로 두 그룹으로 나눌 수 있습니다.
이제 왼쪽 그룹과 오른쪽 그룹에 대해 같은 작업을 반복합니다.
즉, 각 그룹에서 피벗을 선택하고, 피벗을 기준으로 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 옮깁니다.
그룹을 나누고 나서도 여전히 정렬되지 않은 그룹이 있다면, 다시 그 그룹에서 피벗을 선택하여 위의 과정을 반복합니다.
이를 반복하면서 작은 물건부터 큰 물건까지 순서대로 정렬됩니다.
정렬이 완료되면, 왼쪽 그룹의 물건들, 피벗, 오른쪽 그룹의 물건들 순서로 물건을 배치하면
크기 순으로 정렬된 배열이 완성됩니다.
이렇게 재귀적으로 수행하면, 물건들을 크기 순으로 정렬할 수 있습니다.
퀵소트 알고리즘은 분할 정복 방법을 사용하여 작은 작업들로 나누어 해결하고,
이를 조합하여 전체적인 정렬을 수행하는 효과적인 알고리즘입니다.
이렇게 퀵소트를 통해 물건들을 정렬하면, 작은 물건부터 큰 물건까지 순서대로 나열할 수 있습니다.
예를 들어, 5개의 물건이 있고, 크기는 각각 7, 2, 10, 1, 8 이라고 합시다.
이를 퀵소트로 정렬하면 다음과 같은 과정을 거칩니다.
피벗을 선택합니다. 이번에는 7을 피벗으로 선택해보겠습니다.
피벗을 기준으로 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 옮깁니다.
이 과정을 거치면 2, 1은 왼쪽으로, 10, 8은 오른쪽으로 옮겨집니다.
이제 왼쪽 그룹과 오른쪽 그룹에 대해 재귀적으로 퀵소트를 수행합니다.
왼쪽 그룹에 대해서는 2를 피벗으로 선택하여 정렬하고,
오른쪽 그룹에 대해서는 10을 피벗으로 선택하여 정렬합니다.
이렇게 하면 왼쪽 그룹은 1, 2로 정렬되고, 오른쪽 그룹은 8, 10으로 정렬됩니다.
정렬이 완료된 왼쪽 그룹과 오른쪽 그룹을 합치면 1, 2, 7, 8, 10 순서로 물건들이 정렬되었습니다.
이와 같이 퀵소트는 피벗을 기준으로 분할하고 재귀적으로 정렬하는 과정을 반복하여 정렬을 완료합니다.
퀵정렬, 선택정렬, 버블정렬의 차이

**물론입니다! 예시를 통해 퀵 정렬, 선택 정렬, 버블 정렬의 차이를 설명해드리겠습니다.
1. 예시 배열: [5, 3, 8, 4, 2]
• 퀵 정렬(Quick Sort):
◦ 퀵 정렬은 분할 정복 방식을 사용합니다.
◦ 먼저 배열에서 피벗(pivot)을 선택합니다. 예를 들어, 첫 번째 원소인 5를 피벗으로 선택합니다.
◦ 피벗을 기준으로 작은 값은 왼쪽으로, 큰 값은 오른쪽으로 분할합니다. [3, 4, 2] [5] [8]
◦ 분할된 부분 배열에 대해 재귀적으로 퀵 정렬을 수행합니다.
◦ 최종적으로 정렬된 배열은 [2, 3, 4, 5, 8]이 됩니다.**
**• 선택 정렬(Selection Sort):
◦ 선택 정렬은 최솟값을 선택하여 정렬의 올바른 위치로 이동시킵니다.
◦ 배열에서 가장 작은 값을 찾아 첫 번째 위치로 이동합니다. [2, 3, 8, 4, 5]
◦ 그 다음으로 작은 값을 찾아 두 번째 위치로 이동합니다. [2, 3, 8, 4, 5]
◦ 이와 같은 과정을 반복하여 정렬을 수행합니다.
◦ 최종적으로 정렬된 배열은 [2, 3, 4, 5, 8]이 됩니다.**
**• 버블 정렬(Bubble Sort):
◦ 버블 정렬은 인접한 원소를 비교하여 필요한 경우 서로 교환합니다.
◦ 배열을 처음부터 끝까지 반복하면서 인접한 원소를 비교하여 큰 값을 뒤로 보냅니다.
◦ 한 번의 반복이 끝나면 가장 큰 값이 맨 뒤로 이동합니다.
◦ 이와 같은 과정을 반복하여 정렬을 수행합니다.
◦ 최종적으로 정렬된 배열은 [2, 3, 4, 5, 8]이 됩니다.**
**이 예시에서 퀵 정렬은 분할 정복을 사용하여 피벗을 기준으로 배열을 분할하고 정렬하는 방식을 보여줍니다.
선택 정렬은 최솟값을 선택하여 정렬의 올바른 위치로 이동시키는 방식이며,
버블 정렬은 인접한 원소를 비교하여 필요한 경우 교환하는 방식을 보여줍니다.
이렇게 예시를 통해 각 정렬 알고리즘의 동작 방식과 결과를 확인할 수 있습니다.
Share article