본문 바로가기

Programming/국비학원

220426 - 정렬, 다차원 배열, 기타(운영체제 등)

 

정렬 (sort)
  •  
1
2
3
4
5
6
7
8
9
10
    public static void main(String[] args) {
        int num1=20;
        int num2=50;
       int temp; //임시 보관소
        temp=num1; 
        num1=num2; 
        num2=temp;
        System.out.println("num1= "+num1);
        System.out.println("num2= "+num2);
    }
cs

 

 

  • sort 알고리즘
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
public static void main(String[] args) {
        int[] nums = {23,7,36,12,78};
        int temp;
        
        //소트 전 자료출력
        System.out.println("소트 전 자료");
        for (int i=0;i<nums.length;i++) {
             System.out.print(nums[i]+"  ");
         }
        
        //소트 알고리즘 구현 (ASC)
        for (int a=0;a<nums.length-1;a++) {
            for (int b=a+1;b<nums.length;b++) {
                if (nums[a] > nums[b]) {     
//부등호만 바꾸면 DSC  // 1,2 1,3 1,4 1,5 ~ 비교해 왼쪽부터 가장 작은 값 정렬
                    temp=nums[a];   //큰 값은 잠시 다른 주소에 둠
                    nums[a]=nums[b];    //작은 값을 왼쪽으로
                    nums[b]=temp;
                }
            }
        }

        //소트 후 자료출력
        System.out.println("\n소트 후 자료");
        for (int i=0;i<nums.length;i++) {
            System.out.print(nums[i]+ "  ");
        }   
}
cs

 

 

 

다차원 배열 - 2차원 배열

cf. 1차원 배열 : int[] nums new int[5];

 

  •  

int[][] nums = new int[2][3];    //2행 3열

 

=> 행렬과 유사

     0,0   0,1   0,2
     1,0   1,1   1,2

 

=> 각 행마다 다른 주소번지 가리킴 (=참조값)

    1행 0 1 2 => 주소 a

    2행 0 1 2 => 주소 b

 

 

  •  

int[][] scores = new int[2][];    // 행 두개 scores에 넣음, 열은 pass => 주소 두개 참조
scores[0]=new int[2];   (0,0) (0,1)    // 첫 번지에 두개 할당
scores[1]=new int[3];   (1,0) (1,1) (1,2)    // 둘째 번지에 세개 할당

 

=>행렬과는 다름

 

 

  •  
1
2
3
4
5
6
7
8
9
10
11
12
13
    public static void main(String[] args) {
        int[][] nums = new int[2][3];
        nums[0][0]=10;
        nums[1][1]=50;
        System.out.println(nums.length);    //2 - 각 행마다 하나의 주소번지 가리킴 (행 수)
        System.out.println(nums[0].length);     //3 - 주소번지가 갖고 있는 칸들 (열 수)
    
        for (int a=0;a<nums.length;a++) {
            for(int b=0;b<nums[a].length;b++) {
                System.out.print(nums[a][b]+" ");
            }
        }
    }
cs

//

2
3
10 0 0 0 50 0 

 

 

※ 배열 인덱스 오류
int[] nums= new int[5];    //크기, 갯수가 5
nums[0]=10;
nums[5]=50;    //인덱스는 0~4까지만 존재 => 5는 존재X

 

 

 

 

기타
  • 메모장 기능

.LOG 작성 후 저장 => 저장한 날짜, 시간 출력

 

 

.LOG
오후 7:47 2022-04-26
김철수대리 우리상사 홍길동 전화
오후 7:49 2022-04-26

 

 

  • 엑셀

visual basic => 함수 추가 개발 가능

 

 

 

  • 운영체제

서버용 운영체제: 맥 OS(operating system), 리눅스, 솔라리스

일반 운영체제: 윈도우

 

과거 운영체제: CLI 체제 (Command Line Interface) => CMD 명령 프롬프트

 

명령 프롬프트 용어 : 

cd.. => 상위폴더로 빠져나옴
cd 하위폴더명 => 하위폴더로 이동
mkdir 폴더명 => 폴더 생성
rmdir 폴더명 => 폴더 삭제
move test.txt c:\hk => 파일 이동

 

 

  • 기타

윈도우 검색창:

mstsc => 원격 연결
\\Desktop-6018gmk => 타 컴퓨터 해당 폴더로 이동

 

-mySQL
php에 어울림

 

-네트워크
랜선(네트워크선) => 자료 공유 가능

 

-자바

JDK (자바 개발도구 패키지)
JRE (라이브러리) : 자바의 실행환경
JVM (자바 가상 머신) : 실행파일이 운영체제와 맞지 않더라도 변환 => 자바는 여러 운영체제에서 이용 가능

 

 

 

 

 

//

  • 로또 + 알고리즘

로또 1~45까지 랜덤숫자 6개
중복값 없애기 (sort 알고리즘 활용)

 

=>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public static void main(String[] args) {
        boolean run=true;
        int[] lotto=new int[6];
        while (run) {
            for (int i=0;i<lotto.length;i++) {
                lotto[i] = (int)(Math.random()*45)+1;
            }
            run = false;
            for (int a= 0;a<lotto.length-1;a++) {
                for (int b=a+1;b<lotto.length;b++) {
                    if (lotto[a]==lotto[b]) {
                        run = true;
                    }
                }
            }    
        }
        for (int i=0;i<lotto.length;i++) {
        System.out.println(lotto[i]);
        }
    }
cs

 

 

  • 소트 알고리즘 문제

int[] scores = {78,96,80,60,70};
String[] names = {"김철수", "홍길동","이영희","박찬호","이영표"};
답:
** 시험 자료 출력 **
김철수 - 78
홍길동 - 96
이영희 ~
** 성적순 자료 출력 **
1등: 홍길동 - 96
2등: 이영희 - 80
3등: 김철수 - 78
~

 

=>

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
    public static void main(String[] args) {
        int[] scores = {78,96,80,60,70};
        int temp;
        String strTemp;
        String[] names = {"김철수""홍길동","이영희","박찬호","이영표"};
        
        //소트 전 자료 출력
        System.out.println("** 시험 자료 출력 **");
        for (int i=0;i<scores.length;i++) {
                System.out.println(names[i] + " - " + scores[i]);
        }
        
        //소트 알고리즘 구현
        for (int a=0;a<scores.length-1;a++) {    //5개 자료 비교할 때 4번만 비교함
            for (int b=a+1;b<scores.length;b++) {
                if (scores[a]<scores[b]) {
                    temp=scores[a];
                    scores[a]=scores[b];
                    scores[b]=temp;
                    strTemp=names[a];
                    names[a]=names[b];
                    names[b]=strTemp;
                } 
            }
        }
 
        //소트 후 자료 출력
        System.out.println("** 성적순 자료 출력 **");
        for (int i=0;i<scores.length;i++) {
            System.out.println((i+1+ "등 " + names[i] + " - " + scores[i]);
    }
    }
cs

 

 

 

  • 다차원배열 magic square 문제

홀수x홀수 행렬만 가능

8 1 6
3 5 7
4 9 2

 

a+b+c=15

010   우상대각선 010       010          
000  =>            000  => 300              
000                  002       002                

행 없으면 오른쪽 마지막행에
열 없으면 맨왼쪽 열에
둘다 없으면 두번 내려오고 왼쪽으로

 

=>

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
public static void main(String[] args) {
        int[][] magic = new int[3][3];
        int row = 0;    //행 변수
        int col=magic[0].length/2;    //열 변수  = 3/2
        int num=1;    //배열에 넣을 숫자
        magic[row][col]=num;  // 1을 (0,1)에 대입
    
        for (num=2;num<=magic.length*magic[0].length;num++) { 
// magic=행의 갯수 magic[0]=열의 갯수 => 3*3=9
        // 우상 대각선으로 이동한다    
            row--;
            col++;
            
            //☆1. 행, 열 둘다 존재하지 않을 경우
            if (row<0 && col==magic[0].length) {
                row+=2;
                col--;
            }
            
            //행이 존재하지 않을 경우
            if(row<0) {
                row=magic.length-1;
            }
            
            //열이 존재하지 않을 경우
            if(col==magic[0].length) {
                col=0;
            }
            
            //이미 값이 존재할 경우
            if (magic[row][col] != 0) {    
//이차원배열은 값 안 정해졌을 때 0으로 돼있음
                row+=2;
                col--;
            }
            magic[row][col]=num;
        }//for문
 
        //콘솔에 출력
        for (int a=0;a<magic.length;a++) {
            for (int b=0;b<magic[a].length;b++) {
                if (magic[a][b]<10) {
                System.out.print(" "+magic[a][b]+" ");
                } else {
                System.out.print(magic[a][b]+" ");
                }
            }
            System.out.println();
 
        }
    }
 
}
cs

 

 

 

 

 

 

 

 

 

 

 

 

//

2차원 배열이 조금 헷갈리긴 한데 선생님이 말씀하신대로 행렬 생각하면서 하니까 또 괜찮은 것 같기도 하고..

중1 수학의 위엄