개발/대덕인재개발원

대덕240912-자바:2차원배열,정렬/DB:날짜함수,집계함수

월은 2024. 9. 12. 18:00

<1~4교시 자바> 

정렬

<h4>버블정렬 연습</h4>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public void method01() {
    /*
    - 정렬 ==> 데이터를 크기순으로 차례로 나열하는 것(오름/내림차순 정렬)
    
        - 오름차순 기준
      1) 버블정렬 : 바로 앞 뒤의 데이터를 비교해서 제일 큰 수를 뒤로 보내는 방식
      2) 선택정렬 : 제일 작은 데이터를 찾아서 앞으로 보내는 방식
          (정렬할 데이터가 N개이면 반복횟수는 N-1회 반복한다.)
     */
    // 버블정렬 연습    
    //    int[] nums = {7,5,3,8,2};
        int[] nums = {7,2,3,8,5}; //경우에 따라서는 작업이 끝났는데도 계속 반복되 비효율적일 수 있음
        
        System.out.println("정렬하기 전: " + Arrays.toString(nums));
        for(int i=0; i<nums.length-1; i++) {    //전체 반복홧수만큼 반복
            boolean changed = false;     // 데이터의 교환이 일어나는 여부를 나타내는 변수
            for(int j=0; j<nums.length - 1 - i; j++) {
                if(nums[j] > nums[j+1]) {        // 앞 뒤값 중에서 앞의 값이 크면 서로 맞바꾼다.
                    int temp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1]  = temp;
                    changed = true;    // 교환이 이루어짐을 나타낸다
                    
                }
            }
            
            System.out.println((i+1) + "회전 결과 : " + Arrays.toString(nums));
            if(changed!=true) {
                break; //변수 i를 쓰는 반복문을 탈출
            }
        }
    }
 
}
정렬하기 전: [7, 2, 3, 8, 5]
1회전 결과 : [2, 3, 7, 5, 8]
2회전 결과 : [2, 3, 5, 7, 8]
3회전 결과 : [2, 3, 5, 7, 8]
cs

 

선택정렬 연습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void method02() {
        // 선택 정렬 연습
        System.out.println("선택 정렬 연습");
        System.out.println();
        
        int[] nums = {7,5,3,8,2};
        System.out.println("정렬하기 전: " + Arrays.toString(nums));
        System.out.println();
        
        for(int i=0; i<nums.length-1; i++) { //전체 횟수만큼 반복(기준데이터의 첨자 역할도 겸한다)
            for(int j=i+1; j<nums.length; j++) {
                if(nums[i] > nums[j]) { //기준위치의 값이 비교값보다 크면 맞교환
                    int temp = nums[i];
                    nums[i] = nums[j];
                    nums[j] = temp;
                }
            }
            System.out.println((i+1+ "회전 결과 : " + Arrays.toString(nums));
        }
}
선택 정렬 연습


정렬하기 전: [7, 5, 3, 8, 2]


1회전 결과 : [2, 7, 5, 8, 3]
2회전 결과 : [2, 3, 7, 8, 5]
3회전 결과 : [2, 3, 5, 8, 7]
4회전 결과 : [2, 3, 5, 7, 8]
        
cs

 

정렬 응용 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void method03() {
        // 석차 구하기 연습
        int[] score = {70,60,80,70,90,60};
        int[] rank = new int[score.length];
        
        for(int i=0; i<score.length; i++) {        //기준데이터의 첨자역할을 한다.
            rank[i] = 1;        // 처음 등수는 1로 초기화한다.
            for(int j=0; j<score.length; j++) {    //비교데이터의 첨자 역할을 한다.
                if(score[i] > score[j] ) { // 기준데이터보다 비교 데이터가 더 크면...
                    rank[i]++;        // 등수값을 증가시킨다.
                //    temp++;
                }
            }
        //    rank[i] = temp;
            
        }
        System.out.println("점수\t등수");
        for(int i=0; i<score.length; i++) {
            System.out.println(score[i] + "\t" + rank[i]); 
        }
    }
점수 등수
70 3
60 1
80 5
70 3
90 6
60 1
cs

 

2차원 배열 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class ArrayTest05 {
 
    public static void main(String[] args) {
        //2차원 배열 ==> 행렬 구조의 배열 == 배열의 배열 형태로 구성
    /*
         - 2차원 배열 선언
         형식) 자료형이름[][] 배열변수명;
         
         - 배열 생성
         배열변수명 = new 자료형이름[행의 개수][열의 개수]
         
         - 배열 선언과 생성을 동시에
     형식1) 자료형이름[][] 배열변수명 = { 
             {데이터들...},            ==> 한 행을 의미한다.
             {데이터들...},
             ...
             }; 
      형식1) 자료형이름[][] 배열변수명 = new 자료형이름[][] { 
             {데이터들...},            ==> 한 행을 의미한다.
             {데이터들...},
             ...
             };         
             
     */
        
        /*
        int[][] temp2 = new int[2][]; 
        temp2[0] = new int[3];
        temp2[1] = new int[3];
        */
        
        /*
         //2차원 배열 선언 및 생성
        int[][] temp = new int[2][3];
        
        //2차원 배열 초기화
        temp[0][0] = 10;
        temp[0][1] = 20;
        temp[0][2] = 30;
        
        temp[1][0] = 100;
        temp[1][1] = 200;
        temp[1][2] = 300;
        */
        
        //2차원 배열의 선언 및 초기화
        int[][] temp = new int[][]{
                {10,20,30},
                {100,200,300}
        };
        
        for (int i=0; i<temp.length; i++) {// 행의 갯수만큼 반복처리
             for(int j=0; j<temp[i].length; j++) { //열의 갯수만큼 반복처리
                 System.out.println(i + " , " + j + " => " + temp[i][j]);
        }
    }
    
 
}
}
0 , 0 => 10
0 , 1 => 20
0 , 2 => 30
1 , 0 => 100
1 , 1 => 200
1 , 2 => 300
cs

 

 

<5~8교시 DB>

날짜 함수 

MONTHS_BETWEEN 으로 수정

NEXT_DAY(DATE,오늘) => 다음주 해당 요일

NEXT_DAY(DATE,내일)==> 내일

1
2
3
4
5
6
7
8
9
10
11
사용예) 사원테이블에서 HIRE_DATE를 이용하여 각 사원의 근속년수를 조회하시오
        근속년수는 XX년 YY월 형식으로 출력하시오.
        Alias는 사원번호, 사원명, 입사일, 근속기간
        
        SELECT EMPLOYEE_ID AS 사원번호,
               EMP_NAME AS 사원명,
               HIRE_DATE AS 입사일,
              LPAD(TRUNC(ROUND(MONTHS_BETWEEN(SYSDATE,HIRE_DATE))/12)||'년' ||
              MOD (ROUND(MONTHS_BETWEEN(SYSDATE,HIRE_DATE)),12)||'월',10) AS 근속기간
          FROM HR.EMPLOYEES
         ORDER BY 3
cs

절삭한(fmt)날짜 반환

1
2
3
4
5
6
7
8
9
사용예) 회원테이블에서 회원생년월일을 이용하여 나이를 조회하시오.
        Alias는 회원번호, 회원명, 생년월일, 나이, 연령대
        
        SELECT MEM_ID AS 회원번호,
               MEM_NAME AS  회원명,
               MEM_BIR AS 생년월일,
               EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM MEM_BIR) AS 나이,
               TRUNC (EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM MEM_BIR), -1)||'대' AS 연령대
          FROM MJY.MEMBER; 


cs

일-J : 줄리언 책력(기원전 4000년경) 기준

집계함수

 

DB에서 절대 잊지 말아야 할 것 중

1.기본키는 Not Null, No Duplicate

2.집계함수

 

 

1
2
3
4
5
6
7
8
9
10
11
 사용예)2020년 월별,상품별 판매집계를 조회하시오
    SELECT SUBSTR(A.CART_NO,5,2)||'월' AS 월,
           B.PROD_NAME AS 상품명, 
           SUM(A.CART_QTY) AS 판매수량,
           SUM(A.CART_QTY*B.PROD_PRICE) AS 판매금액
      FROM MJY.CART A, MJY.PROD B 
     WHERE A.PROD_ID=B.PROD_ID
     GROUP BY SUBSTR(A.CART_NO,5,2), B.PROD_NAME
     ORDER BY 1;
                
         ORDER BY 3
cs