배열의 예)
int[] studentList=new int[3]
// stuArr stuList stuDatas
// 자료형 /변수명/ 값
<연산자 new> ★
"힙 메모리 공간을 생성해주는 연산"
| 데이터 메모리 영역 | 힙 메모리 영역 |
| -변수 -함수(메인) |
-개발자의 영역 개발자가 코드로 new라고 불려야지 영역이 열림 -자동초기화. 즉, 값은 0(값이 있다) |
<forEach문> : 향상된 for문
for (저장된 데이터의 타입 변수명: 출력할 집합 데이터)
for(int v : stuList) {
}
//이터레이터 타입(복사체) : 단지 결과를 보여줄 뿐이다
<플래그 로직> boolean= true or false
: 상당히 많은 부분에서 사용
: 어떤 작업이 인지 아닌지(true or false/ 양자택일)
| i | i<5 | flag | j | j<i | datas[i]==datas[j] |
| 0 | t | f | 0 | f | |
| 1 | t | f | 0 | t | f |
| 1 | f | ||||
| 2 | t | f | 0 | t | t |
| t | 1 | t | f |
예) boolean flag=false; //못찾은 상태를 false로
for(int i=0; i< datas.length; i++)
if(num==datas[i])
index=i;
flag=true; //
if(flag) 찾을수있다
else 찾을수 없다
<정렬알고리즘>
정렬은 왜 쓰나요? 서치, 검색, 탐색을 빨리 하기위해
즉, 데이터 검색을 빠르고 효율적으로 하기위해서
1. 버블정렬
- 버블정렬에서 1회전 정렬하면 가장 큰 정 수가 제자리를 찾는다
즉, 가장 뒤에 온다
-2회전 정렬시 두번쨰로 큰 값이 제자리를 찾는다
-n개의 값이 있을 경우, (n-1)을 하면 모든 값이 제자리를 찾는다.
public static void main(String[] args) {
datas[0]=1;
datas[1]=2;
datas[2]=3;
datas[3]=4;
datas[4]=5;
for(int v:datas) {
System.out.print(v+" "); //이터레이터
}
System.out.println();
for(int a=0;a<datas.length-1;a++) { //길이 -1만큼 반복
// 1회전 정렬
for(int i=0;i<datas.length-1;i++) { // 양옆 데이터끼리 비교하는 횟수
if(datas[i] > datas[i+1]) {
// 교환 알고리즘
int tmp=datas[i];
datas[i]=datas[i+1];
datas[i+1]=tmp;
}
}
System.out.print((a+1)+"회전 정렬 완료 : ");
for(int v:datas) {
System.out.print(v+" ");
}
System.out.println();
}
}
<이진 탐색(이분 검색)>
전제조건 : 데이터가 정렬되어 있어야 한다.
<최대값 찾기>
1.[0]에 있는 값이 최대값일거라고 단정짓기
int max=datas[0];
int maxIndex=0;
2. [1]부터 마지막 인덱스까지 돌면서 최대값보다 큰 값이 존재하는지 확인
3. max보다 큰 값을 찾은 경우 , max 재설정
public class Practice {
public static void main(String[] args) {
int[]datas=new int[5];
datas[0]=1;
datas[1]=2;
datas[2]=3;
datas[3]=4;
datas[4]=5;
for(int v:datas) {
System.out.print(v+" ");
}
int max=datas[0]; //0번째 인덱스 값은 최대값
int maxindex=0; //max 값이 저장된 인덱스 위치
for(int i=1;i<datas.length;i++) {
if(max<datas[i]) {
max=datas[i];
}
}
System.out.println();
System.out.println(max); //5
System.out.println("max의 인덱스 : "+maxindex);//0번째
}
}
<pivot>
pivot을 쓴다면 index가 필요없음
pivot은 일종의 업다운게임
중간을 기준으로 분할해서 탐색한다.
System.out.print("찾고싶은 정수 입력 >> ");
int num=sc.nextInt();
int START=0;
int END=10;
// 이진 탐색
int pivot;
while(true) {
pivot=(START+END)/2; // 피벗(기준)
if(datas[pivot] < num) { // 가운데 숫자가 입력한 숫자보다 크니?
// 업!
START=pivot+1;
}
else if(datas[pivot] > num) { // 가운데 숫자가 입력한 숫자보다 작니?
// 다운!
END=pivot-1;
}
else { // 종료조건 : 찾았다면
break;
}
if(START > END) { // 종료조건 : 못찾았다면
// CROSS(교차) 발생
break;
}
}
if(START<=END) {
System.out.println(num+"은 ["+pivot+"]에 있습니다.");
}
else {
System.out.println(num+"은 없습니다.");
}
'JAVA > 강의' 카테고리의 다른 글
| JAVA 11일차 강의 - 캡슐화와 상속 (0) | 2025.01.30 |
|---|---|
| JAVA 강의 6일차 - 복습과 PK (1) | 2025.01.30 |
| JAVA 강의 3일차 - 반복문 (1) | 2025.01.30 |
| JAVA 강의 1일차- 연산자 (1) | 2025.01.29 |
| JAVA 강의 2일차 - 복습과 반복문 (0) | 2025.01.29 |