정렬(Sort)

1. 배열 요소에 일정한 순서를 부여하는 것.

임의의 숫자가 여러개 존재하는 경우 크기순으로 다시 배열한다.
원본 배열 int[] arr = {4, 2, 7, 9, 1, 3, 5, 6, 8, 0};
정렬후 결과 int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};


2. 정렬 알고리즘 - 버블, 선택, 삽입, 쉘, 퀵

1회전 ------------------------------------------------

- 항목1과 항목2를 비교 -> 4, 2
- 작은 값에 항목1에 배치. 큰 값을 항목2에 배치 -> 2, 4
- 항목2와 항목3을 비교 -> 4, 7
- 작은 값에 항목2에 배치. 큰 값을 항목3에 배치 -> 4, 7
- 위와 같은 방법으로 항목 두 개씩 비교 및 바꿔치기를 반복 실행.- 가장 큰 값이 가장 끝에 배치된다. -> 9


2회전 ------------------------------------------------

- 가장 끝에 있는 값을 제외하고 나머지에 대해서 1회전과 같은 방법 사용.
- 끝에서 두 번째에 두번째로 큰 값이 배치된다. -> 8


3회전 ------------------------------------------------

- 2회전 상황을 반복한다.
- 끝에서 세 번째에 세번째로 큰 값이 배치된다. -> 7


....

9회전 ------------------------------------------------

- 마지막 숫자 2개를 정렬. -> 0, 1

=> 정렬 완료.(회전수는 (n - 1)회)







문제) 외부에서 임의의 여러개의 숫자를 입력받고 정렬해서 출력.
실행 예)
갯수지정(2~10)?5
숫자 입력(1)?
숫자 입력(2)?
숫자 입력(3)?
숫자 입력(4)?
숫자 입력(5)?
원본:
정렬:






문제)여러명의 성적을 입력 받고, 점수가 높은 순으로 등수 부여해서 출력.
배열, 정렬 알고리즘 이용.
실행 예)
인원수(2~10)?5
이름 점수(1)?kim 80
이름 점수(2)?park 90
이름 점수(3)?choi 100
이름 점수(4)?hong 70
이름 점수(5)?kang 60
-----------------------
1등 choi 100
2등 park 90
3등 kim 80
4등 hong 70
5등 kang 60





문제)여러명의 성적을 입력 받고, 점수가 높은 순으로 등수 부여해서 출력.
배열, 석차 알고리즘 이용.
실행 예)
인원수(2~10)?5
이름 점수(1)?kim 80
이름 점수(2)?park 90
이름 점수(3)?choi 100
이름 점수(4)?hong 70
이름 점수(5)?kang 60
-----------------------
kim 80 3등
park 90 2등
choi 100 1등
hong 70 4등
kang 60 5등
-----------------------






배열의 배열 (다차원 배열)

1. 1차원 배열 여러개를 조합시켜서 사용하는 배열.
2. 선언
자료형[][] 변수 = new 자료형[크기1][크기2]; 
자료형[인덱스1][인덱스2] = 값;
자료형[][] 변수 = {{값1, 값2, ...}, {값, 값, ...}, {값, 값, ...} ,...};

예를 들어,
int[][] arr = new int[2][3];
arr[0][0] = 0;
arr[0][1] = 0;
arr[0][2] = 0;
arr[1][0] = 0;
arr[1][1] = 0;
arr[1][2] = 0;

for (int a=0; a<arr.length; a++) {  //arr.length는 2
for (int b=0; b<arr[a].length; b++){ //arr[a].length는 3
arr[a][b] = 0;
}
}

for (int a=0; a<arr.length; a++) {  //arr.length는 2
for (int b=0; b<arr[a].length; b++){ //arr[a].length는 3
System.out.printf("%d ", arr[a][b]); // 배열의 배열
}
System.out.println();
}


문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 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





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
25 24 23 22 21
20 19 18 17 16
15 14 13 12 11
10  9  8  7  6
 5  4  3  2  1





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  6 11 16 21
 2  7 12 17 22
 3  8 13 18 23
 4  9 14 19 24
 5 10 15 20 25





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5 
 2  3  4  5  6
 3  4  5  6  7
 4  5  6  7  8
 5  6  7  8  9







문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
 5  1  2  3  4
 4  5  1  2  3
 3  4  5  1  2
 2  3  4  5  1





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
10  9  8  7  6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25





문제) 마방진(가로 세로 및 대각선에 있는 숫자들의 합이 같도록 배열한 것)






만년달력

1. 1년 1월 1일부터 전년도 12월 31일까지의 총 날짜수 구함.
int total = (year-1)*365 + ((year-1)/4 - (year-1)/100 + (year-1)/400));


2. 해당년도 1월 1일부터 해당년도 해당월 1일까지의 총 날짜수 구함.
int[] m = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
for (int a=0; a<month-1; a++) {
total += m[a];
}
//해당월 1일 때문에 +1
total++;
//올해가 윤년이면서 2월 이상인 경우 +1
if (month>=3 && (year%4==0 && year%100!=0 || year%400==0)){
total++;
}


3. 해당년도 해당월의 첫 날(1일)의 요일(일, 월, 화, 수, 목, 금, 토) 구함. //7로 나눈 나머지 연산 구함. 0:일~6:토
String[] d = {"일", "월", "화", "수", "목", "금", "토"};
int days = total % 7;
System.out.printf("%s요일 %n", d[days]);


4. 해당년도 해당월의 마지막 날짜 구함.


5. 해당년도 해당월 달력 출력. -> 인터페이스의 영향을 받음.





문제) 특정 년, 월, 일 입력시 요일 구하기.
실행 예)
년도?
월?
일?
결과 : 월요일





문제) 아래와 같은 형태의 숫자 출력이 되도록 배열의 배열 지정.
 1  2  3  4  5
16 17 18 19  6
15 24 25 20  7
14 23 22 21  8
13 12 11 10  9


해답은 없음 알아서 풀어보기


WRITTEN BY
빨강꼬마

,