반응형

 

배열

 

: 변수를 nm개 선언하고 저장하기엔 코드 낭비가 발생한다. 그렇기에 배열의 형식으로 많은 양의 데이터를 적은 코드로 처리하는 방식을 말한다. 

 

사용법은 아래와 같다.

 

타입[] 변수명 = new 타입[배열크기]; // 객체를 만들 때 new를 사용한다.
타입 변수명[] = new 타입[배열크기];

 

 

package kr.or.ddit.study05;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method1();
		obj.method2();
	}
	
	public void method1() {
		/*
		 * int 변수 10개 선언 및 저장
		 * 10개 변수 출력 해보기.
		 */
		
		int i1 = 1;
		int i2 = 2;
		int i3 = 3;
		int i4 = 4;
		int i5 = 5;
		int i6 = 6;
		int i7 = 7;
		int i8 = 8;
		int i9 = 9;
		int i10 = 10;
		
		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i3);
		System.out.println(i4);
		System.out.println(i5);
		System.out.println(i6);
		System.out.println(i7);
		System.out.println(i8);
		System.out.println(i9);
		System.out.println(i10);
	}
	
	public void method2() {
		/*
		 * int 변수 10개 선언 및 저장
		 * 10개 변수 출력 해보기.
		 * 
		 * int <- 타입
		 * []  <- 배열 선언
		 * new <- 메모리 할당
		 * int[10] <- 생성 숫자.
		 */
//		int arr[] = new int[10];
		int[] arr = new int[10]; // 객체를 만들 때 new를 사용한다.
		System.out.println(arr);
		for (int i = 0; i < 10; i++) {
			arr[i] = i;
			System.out.println(arr[i]);
		}
	}
}

 

결과 화면1

 

 

package kr.or.ddit.study05;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method3();
	}
    
	public void method3() {
		/*
		 * 정수 5개를 저장하고 역순으로 출력.
		 */
		int[] num = new int[5];
		num[0] = 1;
		num[1] = 2;
		num[2] = 3;
		num[3] = 4;
		num[4] = 5;
        
		/*
		 * 배열.length <- 배열의 길이를 나타냄.
		 */
		for (int i = 0; i < num.length; i++) {
			System.out.println(num[num.length-i-1]);
		}
	}
}

 

결과 화면2

 

 

package kr.or.ddit.study05;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method4();
	}
    
	public void method4() {
		/*
		 * 배열을 만들어 정수 5개 값을 저장 해보기. 
		 */
		
		int[] num = {1,2,3,4,5};
		
		for (int i = 0; i < num.length; i++) {
			System.out.println(num[i]);
		}
	}
}

 

결과 화면3

 

 

package kr.or.ddit.study05;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method5();
	}
    
	public void method5() {
		/*
		 * 학생 10명의 점수를 입력하고
		 * 1. 평균, 총점을 구하시오.
		 * 2. 최대값, 최소값.
		 */
		int[] scores = {75,77,43,83,90,65,82,94,55,70};
		int sum = 0;
		double avg;
		int max = scores[0];
		int min = scores[0];
		
		for (int i = 0; i < scores.length; i++) {
			sum += scores[i]; // 총점과 평균
			max = max > scores[i] ? max : scores[i]; // 최대값
			min = min < scores[i] ? min : scores[i]; // 최소값
		}
		avg = (double)sum/scores.length;
		
		System.out.println("평균 : " + avg);
		System.out.println("총점 : " + sum);
//		System.out.printf("총점 : %d 평균 : %f ", sum, avg);

		// 위와 같은 삼항연산 방식으로 해도 문제 없다.
		for(int i = 0; i < scores.length; i++) {
			if(max < scores[i]) {
				max = scores[i];
			}
			if(min > scores[i]) {
				min = scores[i];
			}
		}
		System.out.println("최대값 : " + max);
		System.out.println("최소값 : " + min);
//		System.out.printf("최대값 : %d 최소값 : %d ", max, min);
	}
}

 

결과 화면4

 

 

 

버블 정렬

 

:  서로 인접한 두 데이터를 검사하여 정렬하는 방식이다.
인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환한다.

여러 정렬 중에 가장 느리다.

 

package kr.or.ddit.study05.sec02;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method6();
	}
    
	public void method6() {
//		int a = 7;
//		int b = 3;
//		
//		System.out.println("a : " + a + " b : " + b);
//		
//		/*
//		 * a 값과 b 값을 바꿔 보세요.
//		 */
//		int temp = a;
//		a = b;
//		b = temp;
//		
//		System.out.println("a : " + a + " b : " + b);
		
		/*
		 * 버블 정렬
		 * 원본자료가 n개 일때 n-1차 운행한다.
		 * 각 회차에서 인접한 두 값을 비교하여 
		 * 오름 차순인 경우 작은 값을 앞에 위치시킴
		 * 내림 차순인 경우    큰 값을 앞에 위치시킴
		 */
		int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
		
		// 정렬 전 출력 구문
		System.out.println("정렬 전");
		for (int i = 0; i < scores.length; i++) {
			int j = scores[i];
			System.out.print(j + "\t");
		}
		System.out.println();
		// 정렬
		for(int i=0; i<scores.length-1; i++) { // 마지막 숫자를 제일 앞에 놓기 위해선 n-1 만큼 실행이 되어야 함
			// j = 0 : 77, 75, 43, 83, 90, 65, 82, 94, 55, 70
			// j = 1 : 77, 75, 43, 83, 90, 65, 82, 94, 55, 70
			// j = 2 : 77, 75, 83, 43, 90, 65, 82, 94, 55, 70
			for(int j=0; j<scores.length-1; j++) { // 작은 수가 앞으로 오는 방법으로 바꿀 시 
				if(scores[j] < scores[j+1]) { // scores[j] > scores[j+1] 로 변경하면 된다.
					int temp = scores[j];
					scores[j] = scores[j+1];
					scores[j+1] = temp;
				}
			}
		}
		// 정렬 후 출력 구문
		System.out.println("정렬 후");
		for(int i=0; i<scores.length; i++) {
			int j = scores[i];
			System.out.print(j + "\t");
		}
	}
}

 

결과 화면5

 

 

 

향상된 버블 정렬

 

package kr.or.ddit.study05.sec02;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method7();
	}
	
	public void method7() {
		int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
		
		// 정렬 전 출력 구문
		System.out.println("정렬 전");
		for (int i = 0; i < scores.length; i++) {
			int j = scores[i];
			System.out.print(j + "\t");
		}
		System.out.println();
		// 향상된 버블 정렬
		// 1, 2, 3, 4, 6, 5
		for(int i=0; i<scores.length-1; i++) {
			boolean end = true;
			for(int j=0; j<scores.length-1; j++) { 
				if(scores[j] < scores[j+1]) {
					int temp = scores[j];
					scores[j] = scores[j+1];
					scores[j+1] = temp;
					
					// 바뀌는 값이 있을 시 false로 변경
					end = false;
				}
			}
			// 바뀌는 데이터들이 없다면 break 문을 탄다.
			if(end) break;
		}
		// 정렬 후 출력 구문
		System.out.println("정렬 후");
		for(int i=0; i<scores.length; i++) {
			int j = scores[i];
			System.out.print(j + "\t");
		}
	}
}

 

결과 화면6

 

 

package kr.or.ddit.study05.sec02;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method8();
	}
    
	public void method8() {
		/*
		 * 5명의 점수를 스캐너를 통해 입력 받고,
		 * 점수 순으로 정렬해 보시오.
		 * 
		 * 높은 점수가 앞으로.
		 */
		int[] scores = new int[5];
		
		for (int i = 0; i < scores.length; i++) {
			System.out.print("점수 입력해 주세요 : ");
			scores[i] = sc.nextInt();
		}
		System.out.println();
		
		/*
		 * 1. 입력된 점수 출력하기
		 */
		System.out.println("정렬 전");
		for (int i = 0; i < scores.length; i++) {
			int j = scores[i];
			System.out.print(j + "\t");
		}
		System.out.println();
		
		/*
		 * 2. 정렬 하기
		 */
		for (int i = 0; i < scores.length-1; i++) {
			boolean end = true;
			for (int j = 0; j < scores.length-1; j++) {
				if(scores[j] < scores[j+1]) {
					int temp     = scores[j];
					scores[j]    = scores[j+1];
					scores[j+1]  = temp;
					
					end = false;
				}
			}
			if(end) break;
		}
		
		/*
		 * 3. 출력하기
		 */
		System.out.println("정렬 후");
		for (int i = 0; i < scores.length; i++) {
			System.out.print(scores[i] + "\t");
		}
	}
}

 

 

 

 

선택 정렬

 

: 데이터들 중 가장 작은 데이터를 찾아 가장 앞의 데이터와 교환해나가는 방식이다.

 

package kr.or.ddit.study05.sec02;

import java.util.Scanner;

public class ArrayExample01 {
	Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {
		ArrayExample01 obj = new ArrayExample01();
		obj.method9();
	}
	
	public void method9() {
		/*
		 * 선택 정렬
		 * 
		 * 최소값 혹은 최대값으로
		 * 행을 먼저 맞춘 후 바꿈
		 */
		int[] scores = {75, 77, 43, 83, 90, 65, 82, 94, 55, 70};
		
		/*
		 * 향상된 for 문
		 * 
		 * for (배열 혹은 리스트의 타입 i : 배열 혹은 리스트){
		 * 
		 * }
		 */
//		for(int i=0; i<scores.length; i++) {
//			int score = scores[i];
//			System.out.print(score + "\t");
//		}
		// 위의 코드와 같은 방식으로 아래처럼 쓸 수 있다.
		
		for (int score : scores) {
			System.out.print(score + "\t");
		}
		System.out.println();
		
		
		for (int i = 0; i < scores.length - 1; i++) {
			int min = i;
			for (int j = i; j < scores.length; j++) {
				if(scores[j] < scores[min]) {
					min = j;
				}
			}
			
			int temp = scores[min];
			scores[min] = scores[i];
			scores[i] = temp;
		}
		System.out.println("정렬 후");
		for (int i = 0; i < scores.length; i++) {
			System.out.print(scores[i] + "\t");
		}
	}
}

 

결과 화면8

 

 

 

Tip

 

- 향상된 for 문

 

: 처음부터 끝까지 반복하는 경우 사용할 수 있다.

주로 배열을 처음부터 끝까지 출력할 때 사용한다.

 

사용법은 아래와 같다.

 

for(자료형 변수명 : 배열명) {
	실행문;
}

// 배열명의 처음부터 끝까지 출력한다.

 

 

반응형

'자바' 카테고리의 다른 글

[Java 초급] 11장 2차원 배열  (0) 2023.12.12
[Java 초급] 10.5.1장 테스트  (0) 2023.12.11
[Java 초급] 9장 참조 타입  (0) 2023.12.11
[Java 초급] 8장 반복문 while문, do-while문  (0) 2023.12.11
[Java 초급] 7.5장 테스트  (0) 2023.12.08