프로그래밍/자바공부 - 수업일차별

수업 12일차

leecoder 2021. 9. 11. 17:59

배열

  1. 배열 복사
    • 배열 크기 증가
    • 배열 내용 복사
      • for(int i = 0; i < m.length; i++)
        temp[i] = m[i];
      • System 클래스 안에 배열을 복사하는 arraycopy()함수가 있음
        System.arraycopy(복사할 원본, 복사 시작 위치, 복사 된 배열, 저장 시작 위치, 크기);
  2. 배열 별 초기 값
    • byte short int long -> 0
    • float double -> 0.0
    • boolean -> false
    • char -> ’\u0000’
    • 참조 타입(String) -> null
  3. char배열과 String클래스
    • String -> char[] 형변환
      char [] 배열명 = 문자열 변수명.toCharArray();
    • char[] -> String
      String 변수명 = new String(char형 배열명);
  4. 다차원 배열
    • 정의 : 2차원 배열 이상
    • 표현 방법 & 크기
      • 1차원 배열 : 배열의 각 요소를 열로만 표현
        배열명.length : 열 크기
      • 2차원 배열 : 배열의 각 요소를 형, 열로만 표현
        int [][] 배열명 = new int [4][2] -> 4행 2열의 2차원 배열
      • 배열명.length : 행 크기
        배열명[i].length : I행의 열 크기
      • 3차원 배열 : 배열의 각 요소를 면, 행, 열로만 표현
        int [][][] 배열명 = new int [3][4][2] -> 3면 4행 2열의 3차원 배열
        배열명.length : 면 크기
        배열명[i].length : i면의 행 크기
        배열명[i][j].length : i면 j행의 열 크기
      • 4차원 배열 : 배열의 각 요소를 권, 면, 행, 열로만 표현
    • 사용 예
      • 1학년 1반에 30명 씩 8반인 경우 문제) 7반의 15번 학생의 국어 점수
        int [] m1 = new int [30*8]; kors[6*30+15-1];
        int [][] m2 = new int[8][30]; kors[6][14];
      • 1~3학년, 1학년에 8반, 1반에 30명 문제) 3학년 5반 20번 학생의 국어 점수
        int [] m1 = new int [3*8*30]; kors[2*8*30 + 4*30 + 20-1];
        int [][][] m3 = new int [3][8][30]; kors[2][4][19];
  5. 동적 배열
    • 정의 : 크기가 정해져 있지 않고 프로그램 실행 중에 크기가 정해지는 배열
    • 코드 : 자료형 [] 배열명;
      배열명 = new 자료형[배열크기];
  6. 2차원 <-> 1차원 배열 변경
    • 1차원 배열 -> 2차원 배열
      for (int I = 0; I < 배열명.length; I++){
      	배열명[i / 배열명[0].length][i % 배열명[0].length] = 1차원 배열명[i];
      }
    • 2차원 배열 -> 1차원 배열
      ㄱ) 
      for (int I = 0; I < 배열명.length; I++){
      	for (int j = 0; j < 배열명[i].length; j++){
      		배열명[배열명[i].length * I + j] = 배열명[i][j]
      	}
      }
      ㄴ) 
      for (int I = 0, k = 0; I <배열명.length; I++){
      	for (int j = 0; j < 배열명[i].length; j++, k++){
      		배열명[k] = 배열명[i][j];
      	}
      }

정렬

  1. 정의 : 자료를 일정한 기준에 따라서 나열한 것
  2. 방법
    • 오름차순 정렬(ascending) : 작은 것부터 큰 것 순으로 정렬
      ex) 0123456, abcdef, ㄱㄴㄷㄹㅁㅂ
    • 내림차순 정렬(descending) : 큰 것부터 작은 것 순으로 정렬
      ex) 6543210, fedcba, ㅂㅁㄹㄷㄴㄱ
  3. 종류 : 버블, 선택, 삽입, 병합, 퀵, 힙 정렬
  4. 버블 정렬(bubble sort)
    • 방법 : 서로 이웃한 데이터들을 비교하여 가장 큰 데이터를 가장 뒤로 보내는 정렬
    • 코드
      for (int i = 0; i < 배열명.length-1; i++){
      	for (int j = 0; j < 배열명.length –1 –i; j++){
      		if(배열명[j] > 배열명[j+1]){
      			int temp = 배열명[j];
      			배열명[j] = 배열명[j+1];
      			배열명[j+1] = temp;
      		}
      	}
      }

      ex) int [] m = {3,5,2,4,1};
      3 2 5 4 1		2 3 4 1 5 		2 1 3 4 5 		1 2 3 4 5
      3 2 4 5 1		2 3 1 4 5
      3 2 4 1 5
        1회전 			 2회전 			3회전 		  4회전
  5. 선택 정렬(selection sort)
    • 방법 : 맨 앞부터 현재 위치의 수와 나머지 수중 가장 작은 것과 위치를 바꿔 작은 수를 앞으로 오게 만드는 정렬
    • 코드 1
      for (int i = 0; i < 배열명.length-1; i++){
      	for (int j = i + 1; j < 배열명.length; j++){
      		if(배열명[i] > 배열명[j]){
      			int temp = 배열명[i];
      			배열명[i] = 배열명[j];
      			배열명[j] = temp;
      		}
      	}
      }

      ex) int [] m = {3,5,2,4,1};
      3 5 2 4 1		1 3 5 4 2 		1 2 4 5 3 		1 2 3 4 5
      2 5 3 4 1 		1 2 5 4 3 		1 2 3 5 4
      1 5 3 4 2
        1회전 			2회전 			3회전 		  4회전
    • 코드 2
      for (int i = 0; i < 배열명.length-1; i++){
      	min = 999;
      	for (int j = i; j < 배열명.length; j++){
      		if(min> 배열명[j]){
      			min = 배열명[j];
      			idx = j;
      		}
      		int temp = 배열명[j];
      		배열명[j] = 배열명[idx];
      		배열명[idx] = temp;
      	}
      }

      ex) int [] m = {3,5,2,4,1};
      1 5 2 4 3 		1 2 5 4 3 		1 2 3 4 5
      1회전 			2회전 			3회전

'프로그래밍 > 자바공부 - 수업일차별' 카테고리의 다른 글

수업 13일차  (0) 2021.09.11
수업 11일차  (0) 2021.09.02
수업 10일  (0) 2021.09.01
수업 9일차  (0) 2021.09.01
수업 8일차  (0) 2021.08.31