JAVA

DAY 5 - 배열 / 선택정렬 / 버블정렬 (2024.07.09)

summ.n 2024. 8. 13. 09:04

오늘은 화요일 날씨가 아주 꿉꿉 습하고 덥다 하하하

 

파일 작성할 때 기본이지만 알아야되는 것들 정리해보면 !!

 

 

class Test {

public static void main(String{} args){

}

}

 

class Sample {

public static void main(String{} args){

}

}

 

위에 처럼 class 여러개 만드는거는 상관없음. main 메소드는 하나만 존재해야함.


Test.java

 

public class Test{

int a; // 필드(class 소속)

int b = 10;

int c;

c = 20; //error 밖에있는 필드는 선언만 가능

 

public static void main(String{} args){

int a; // 지역변수(main 소속)

}

}

 

class Sample{

}

 

 

main 메소드가 없으면 주가 되는 클래스 앞에는 public이 붙어야 함.

 


방을 하나만 잡으면 변수라고 하는데

변수는 메모리의 일정공간을 잡아달라는 말이다.

방을 만들 때 즉, 변수를 만들 때는 앞에 자료형이 무엇인지 적어줘야한다.

 

자료형 변수명

int a

 

여기서 방을 여러개 잡으면 그게 바로 배열이 되는 것이다.

배열에대해서 이제 자세히 들어가 보자 !

 

 

* 배열(Array)

- 자료형[ ] 배열명

- 자료형 배열명[ ]

위 두 개 중에 편한대로 쓰면 됨.

 

int a; int[3] ar; error

int[ ] ar;

 

ar = new int[3]; //new쓰면 데이터 들어오는게 아닌 주소가 들어옴.

방 3개를 잡고 방 3개 잡은 주소를 줌.

ar은 시작주소만 가지고있기 때문에 의미없음.

방번호를 줘야 안에 들어있는 데이터 알 수 있음.

 

배열은 연속적인 공간을 잡아준다고 보면 됨.

 

ar[0] = 25; //방 번호 필수

ar = 25; //error

 

String a = new String("apple") //new 연산자 썼으면 주소 갖고 들어옴.

 


* 배열 (개수가 정확함)

-> 연속적으로 잡음.

-> 크기 조정이 안됨.

int형 => 방 3개

4byte 4byte 4byte => 12byte

 

 

* Linked (짜투리 공간을 이용하는) (개수가 왔다갔다)

짜투리공간에 방 1개있으면 그 뒤에 주소 매달려있음 /

그 주소는 어디에 뭐가있더라 알려줌 / 내 뒤에 뭐가 있는지 (기차같은 느낌(?))

언제든지 크기 조정이 가능함.

4byte + 4byte(주소) / 4byte + 4byte(주소) / 4byte + 4byte(주소) => 24byte 씀

 

Collection

-> ArrayList

-> Map

 


Array01.java

package array;

import java.util.Arrays;

public class Array01 {

	public static void main(String[] args) {
		int[] ar; //배열 선언
		ar = new int[5]; //배열 생성
		//배열은 초기값 안줘도됨.

		ar[0] = 25;
		ar[1] = 36;
		ar[2] = 42;
		ar[3] = 17;
		ar[4] = 95;


		System.out.println("배열명 ar = " + ar); //[I@372f7a8d 클래스명@16진수 Integer(클래스)
		System.out.println("배열 크기 = " + ar.length); //배열 크기
		System.out.println();
		
		for(int i=0; i<ar.length; i++) {
			System.out.println("ar[" + i + "] = " + ar[i]);
		}//for i
		System.out.println();
		
		
		System.out.println("거꾸로 출력");
		for(int i=ar.length-1; i>=0; i--) {
			System.out.println("ar[" + i + "] = " + ar[i]);
		}
		System.out.println();
		
		
		System.out.println("홀수 데이터만 출력");
		for(int i=0; i<ar.length; i++) {
			if(ar[i] % 2 == 1) {
				System.out.println("ar[" + i + "] = " + ar[i]);
			}	
		}
		System.out.println();
		
		
		System.out.println("인덱스가 짝수인 것만 출력");
		for(int i=0; i<ar.length; i++) {
			if(i % 2 == 0) {
				System.out.println("ar[" + i + "] = " + ar[i]);
			}	
		}
		System.out.println();
		
		
		System.out.println("오름차순으로 정렬");
		Arrays.sort(ar);	//static 아니므로 new x
							// void는 결과값이 없으므로  ?? = Arrays.sort(ar) x	
		for(int i=0; i<ar.length; i++) {
			System.out.print(ar[i] + " ");	
		}
		System.out.println("\n");
		
		
		System.out.println("확장 for문");
		for(int data : ar) {  //ar.length를 안 써도 배열크기만큼 for문이 돈다. -> 데이터 전달함.
			System.out.print(data + " ");
		}
		System.out.println();
	}
}
 
배열명 ar = [I@372f7a8d
배열 크기 = 5

ar[0] = 25
ar[1] = 36
ar[2] = 42
ar[3] = 17
ar[4] = 95

거꾸로 출력
ar[4] = 95
ar[3] = 17
ar[2] = 42
ar[1] = 36
ar[0] = 25

홀수 데이터만 출력
ar[0] = 25
ar[3] = 17
ar[4] = 95

인덱스가 짝수인 것만 출력
ar[0] = 25
ar[2] = 42
ar[4] = 95

오름차순으로 정렬
17 25 36 42 95 

확장 for문
17 25 36 42 95 
 

배열 기본 실습들이니 기초부터 탄탄히 !

 


run configuration을 통해서 입력값 받은 상태

호랑이 기린 딸기 25 43.5

 

Array02.java

package array;

import java.util.Arrays;

public class Array02 {

	public static void main(String[] args) {
		for(int i=0; i<args.length; i++) { //배열의 크기에는 괄호없음(명령어)
			System.out.println("args[" + i + "] = " + args[i]);
            //문자열의 크기에는 괄호 o (함수)
			System.out.println("문자열의 크기 = " + args[i].length()); 

            // charAt 첫 번째 있는 글자들 뽑아옴.
			System.out.println("첫 번째 문자 = " + args[i].charAt(0)); 

            //★★★★★
			System.out.println("마지막 문자 = " + args[i].charAt(args[i].length()-1)); 
			System.out.println();
		}//for i
		System.out.println();
		
		System.out.println("확장형 for문");
		for(String data : args) {
			System.out.println(data);			
		}
		System.out.println("\n");
		
		System.out.println("오름차순으로 정렬");
		Arrays.sort(args);
		for(String data : args) {
			System.out.println(data);			
		}
	}

}
 
args[0] = 호랑이
문자열의 크기 = 3
첫 번째 문자 = 호
마지막 문자 = 이

args[1] = 기린
문자열의 크기 = 2
첫 번째 문자 = 기
마지막 문자 = 린

args[2] = 딸기
문자열의 크기 = 2
첫 번째 문자 = 딸
마지막 문자 = 기

args[3] = 25
문자열의 크기 = 2
첫 번째 문자 = 2
마지막 문자 = 5

args[4] = 43.5
문자열의 크기 = 4
첫 번째 문자 = 4
마지막 문자 = 5


확장형 for문
호랑이
기린
딸기
25
43.5


오름차순으로 정렬
25
43.5
기린
딸기
호랑이
 

* charAt 함수

String 타입의 데이터(문자열)에서 특정 문자를 char 타입으로 변환할 때 사용하는 함수

 

String sample = "abc";

char target = sample.charAt(0);

위처럼 String 변수에서 사용할 수 있으며,

 

charAt(i)

i 자리에는 int 형 변수를 넣어서 원하는 위치의 문자를 가져올 수 있다.


for(String data : args) {

System.out.println(data);

}

 

>> 배열에 있는 데이터를 차례대로 받아올 수 있음.

 


배열 크기 입력 : 3

 

ar[0] 입력 : 36

ar[1] 입력 : -25

ar[2] 입력 : 100

 

36 -25 100

합 = xxx

최대값 = xxx

최소값 = xxx

 

Array03.java

package array;

import java.util.Scanner;

public class Array03 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.print("배열 크기 입력 : ");
		int size = scan.nextInt();
		System.out.println();
		
		int[] ar = new int[size];
		int sum = 0;
		
		//입력
		for(int i=0; i<size; i++) {
			System.out.print("ar[" + i + "] 입력 : ");
			ar[i] = scan.nextInt();
			
			sum += ar[i];
		}
		System.out.println();
		
		
		//최대값, 최소값
		int max = ar[0];
		int min = ar[0];

		//int max, min;
		//max = min = ar[0];
		
		for(int i=1; i<size; i++) {
			if(max<ar[i]) max = ar[i];
			
			if(min > ar[i]) min = ar[i];
		}
		
			
		//출력
		for(int data : ar) {
			System.out.print(data + " ");
		}
		System.out.println("\n");
		
		System.out.println("합 = " + sum);
		System.out.println("최대값 = " + max);
		System.out.println("최소값 = " + min);
		
	}

}
 
배열 크기 입력 : 3

ar[0] 입력 : 36
ar[1] 입력 : -25
ar[2] 입력 : 100

36 -25 100 

합 = 111
최대값 = 100
최소값 = -25
 

[선택정렬]

대표사진 삭제

사진 설명을 입력하세요.

  1. 주어진 배열 중에 최소값을 찾습니다.
  2. 그 값을 맨 앞에 위치한 값과 교체합니다. (pass)
  3. 맨 처음 위치를 뺀 나머지 배열을 같은 방법으로 교체합니다.
  4. 하나의 원소만 남을 때까지 위의 1~3 과정을 반복합니다.

 

SelectionSort.java

package array;

import java.util.Arrays;

public class SelectionSort {

	public static void main(String[] args) {
		int[] ar = {30, 36, 25, 45, 28}; 

		System.out.print("정렬 전 : ");
		for(int i=0; i<ar.length; i++) {
			System.out.print(ar[i] + "  ");
		}
		System.out.println();
		
		//Selection Sort
		int temp;
		for(int i=0; i<ar.length-1; i++) {
			for(int j=i+1; j<ar.length; j++) {
				//if(ar[i]>ar[j]) { //오름차순
				if(ar[i]<ar[j]) { //내림차순
					temp = ar[i];
					ar[i] = ar[j];
					ar[j] = temp; //교환법칙 (넘겨주면 받고)
				}
			}
		}
		
		System.out.print("정렬 후 : ");
		for(int i=0; i<ar.length; i++) {
			System.out.print(ar[i] + "  ");
		}
		System.out.println();
	}

}
 
정렬 전 : 30  36  25  45  28  
정렬 후 : 45  36  30  28  25  
 

[버블정렬]

 

대표사진 삭제

사진 설명을 입력하세요.

BubbleSort.java

package array;

public class BubbleSort {

	public static void main(String[] args) {
		int[] ar = {30, 36, 25, 45, 28}; 

		System.out.print("정렬 전 : ");
		for(int i=0; i<ar.length; i++) {
			System.out.print(ar[i] + "  ");
		}
		System.out.println();

		//Bubble Sort
		int temp;
		for(int i=0; i<ar.length-1; i++) {
			for(int j=0; j<ar.length-1-i; j++) {
				if(ar[j] > ar[j+1]) {
					temp = ar[j];
					ar[j] = ar[j+1];
					ar[j+1] = temp;
				}
			}
		}

		System.out.print("정렬 후 : ");
		for(int i=0; i<ar.length; i++) {
			System.out.print(ar[i] + "  ");
		}
		System.out.println();
	}

}
 
정렬 전 : 30  36  25  45  28  
정렬 후 : 25  28  30  36  45  
 

int temp;

for(int i=0; i<ar.length-1; i++) {

for(int j=0; j<ar.length-1-i; j++) {

if(ar[j] > ar[j+1]) {

temp = ar[j];

ar[j] = ar[j+1];

ar[j+1] = temp;

}

}

}

 

★ j < ar.length-1-i; 이 부분이 키포인트 !!! ★