개발자의 길

[java] 자바 배열 안 내용 정렬 다시 하기-오름,내림차순 본문

4. JAVA

[java] 자바 배열 안 내용 정렬 다시 하기-오름,내림차순

자르르 2012. 9. 3. 17:48


문제) 아래 두개의 1차원 배열(A,B)에 있는 숫자를 기준으로
합집합 (A+B)를 출력. 중복된 숫자는 한번만 출력되어야 한다.
int[] A = {2,3,7,10,11,18,20,21};
int[] B = {3,6,10,14,17};
//출력 예)
A와 B의 합집합: 2 3 7 10 11 18 20 21 6 14 17

public class Main {
public static void main(String[] args) {

//배열 선언 및 할당
int[] A = {2,3,7,10,11,18,20,21};
int[] B = {3,6,10,14,17};

//A와 B배열의 요소 전체 출력.
for (int i = 0; i<A.length; i++){
System.out.printf("%d ", A[i]);
}
for (int i = 0; i<B.length; i++){
System.out.printf("%d ", B[i]);
}
System.out.println();

//A와 B배열의 요소 출력. 중복 제거
for (int i = 0; i<A.length; i++){
System.out.printf("%d ", A[i]);
}
for (int i = 0; i<B.length; i++){
boolean flag = false;
for (int k=0; k<A.length; k++){
if(B[i] == A[k]){
flag = true;
break;
}
}
if (flag)
continue;
System.out.printf("%d ", B[i]);
}
System.out.println();
}
}
==결과
2 3 7 10 11 18 20 21 3 6 10 14 17
2 3 7 10 11 18 20 21 6 14 17
==========================================================================
A와 B의 합집합: 2 3 6 7 10 11 14 17 18 20 21

1. 2개의 배열을 합칠수 있는 크기의 배열준비 (A.length + B.length)
2. A와 B배열의 요소를 0부터 하나씩 비교한후 작은 값을 임시 배열에 저장.
A[0] > B[0] 임시[0] = B[0] //B자리 증가
A[0] < B[0] 임시[0] = B[0] //A는 2번째 배열로 비교함 B는 첫번째 비교 A자리증가
A[0] = B[0] 임시[0] = B[0] //A, B자리 증가
3. 비교가 끝난 후 남는 배열 요소(A 또는 B)를 임시 배열에 저장.
나머지를 임시배열에 입력 //A아니면 B중 남는것을 입시배열에 입력
4. 임시 배열의 요소를 전체 출력. 단, 0은 제외.

public class Main {
public static void main(String[] args) {

//배열 선언 및 할당
int[] A = {2,3,7,10,11,18,20,21};
int[] B = {3,6,10,14,17};
int[] R = new int[15];
int i, j, k;
i=0;
j=0;
k=0;
//A와 B배열의 요소 전체 출력.
for(int y=0; y<A.length; y++){
System.out.printf("%d ", A[y]);
}
for(int y=0; y<B.length; y++){
System.out.printf("%d ", B[y]);
}
System.out.println();
do{
if(A[i] > B[j]){
R[k] = B[j];
k++;
j++;
}
else if(A[i] < B[j]){
R[k] = A[i];
k++;
i++;
}
else if(A[i] < B[j]){
R[k] = B[j];
k++;
j++;
i++;
}
} while(i>=A.length || j>=B.length);
if(j==5){
for(; i<A.length; i++){
R[k] = A[i];
k++;
}
}
for(int q=0; q<R.length; q++){
System.out.printf("%d ", R[q]);
}
System.out.println();

}
}
==========================================================================
문제) 아래 두개의 1차원 배열(A,B)에 있는 숫자를 기준으로
교집합을 출력.
int[] A = {2,3,7,10,11,18,20,21};
int[] B = {3,6,10,14,17};
//출력 예)
A와 B의 교집합: 3 10

public class Main {

public static void main(String[] args) {

//배열 선언 및 할당
int[] A = {2,3,7,10,11,18,20,21};
int[] B = {3,6,10,14,17};

//A와 B배열의 요소 출력.
for (int i = 0; i<A.length; i++){
System.out.printf("%d ", A[i]);
}
for (int i = 0; i<B.length; i++){
System.out.printf("%d ", B[i]);
}
System.out.println();

//A 와B배열의 교집합 출력
for (int i=0; i<B.length; i++){
for (int k=0; k<A.length; k++){
if(B[i] == A[k]){
}
}
System.out.printf("%d ", B[i]);
}
System.out.println();
}
}
//출력 예)
A와 B의 교집합: 3 10

===>>> 교집합 넣을시
System.out.print("두집합의 교집합");
for(int i=0;i<A.length;i++){
for(int j=0;k<B.length;k++){
if(A[i] == B[k])
System.out.print(" "+A[i]);
}
}
============================================================================================
정렬(Sort)

1. 1차원 배열의 요소를 크기 순서대로 재배열
2. 버블정렬, 선택정렬, 삽입정렬, 쉘정렬, 퀵정렬
==========================================================================
==버블정렬
int[] arr= {5,6,2,7,8,9,1,4,3,10};
System.out.print("정렬 전: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

//정렬 과정 - 개선된 버블 정렬
for (int n=0;n<arr.length-1; n++){
for (int k=1;k<arr.length-n;k++){
if(arr[k-1]>arr[k]){
int temp;
temp = arr[k-1];
arr[k-1] = arr[k];
arr[k] = temp;
}
}
}
System.out.print("정렬 후: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

==========================================================================
==선택정렬기준
int[] arr= {5,6,2,7,8,9,1,4,3,10};
System.out.print("정렬 전: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

//정렬 과정 - 개선된 선택정렬
for (int n=0;n<arr.length; n++){
for (int k=0;k<arr.length-1;k++){
if(arr[k+1]<arr[k]){
int temp;
temp = arr[k+1];
arr[k+1] = arr[k];
arr[k] = temp;
}
}
System.out.print("정렬 중: ");
for (int i=0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();
}
System.out.print("정렬 후: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();
==========================================================================

==개선된 버블정렬 - 무회전인 경우 반복을 중단한다.
int[] arr= {0,1,2,3,4,5,9,8,6,7};
System.out.print("정렬 전: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();
//정렬

//정렬 과정 - 버블 정렬
boolean flag;
for (int n=0;n<arr.length-1; n++){
flag = false;
for (int k=1;k<arr.length-n;k++){
if(arr[k-1]>arr[k]){
int temp;
temp = arr[k-1];
arr[k-1] = arr[k];
arr[k] = temp;
flag = true;
}
}
//한 회전이 끝날때 마다 배열 속의 값 출력.
System.out.print("정렬 중: ");
for (int i=0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

if (!flag)
break;

}
System.out.print("정렬 후: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

}
}
==========================================================================
문제) 1차원 배열 안에 있는 숫자들을 내림차순 정렬해서 출력하는 프로그램 작성.
정렬 방법은 버블 또는 선택. 개선된 버블 정렬 중에서 아무거나.

int[] arr= {5,6,2,7,8,9,1,4,3,10};
System.out.print("정렬 전: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

//정렬 과정 - 개선된 선택정렬
boolean flag;
for (int n=0;n<arr.length; n++){
flag = false;
for (int k=0;k<arr.length-1;k++){
if(arr[k+1]>arr[k]){
int temp;
temp = arr[k+1];
arr[k+1] = arr[k];
arr[k] = temp;
flag = true;
}
}
System.out.print("정렬 중: ");
for (int i=0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();
if (!flag)
break;
}
System.out.print("정렬 후: ");
for (int i = 0; i<arr.length; i++){
System.out.printf("%d ", arr[i]);
}
System.out.println();

--10명 이내의 이름. 점수 입력 받아서 점수가 높은 순으로 출력.
출력 예)
인원수[5~10]? 5
1번째 이름? kim
점수? 90
2번째 이름? lee
점수? 100
3번째 이름? park
점수? 85
4번째 이름? choi
점수? 80
5번째 이름? hong
점수? 95

1등 lee : 100
2등 hong : 95
3등 kim : 90
4등 park : 85
5등 choi : 80

import java.util.*;

public class Main {
public static void main(String[] args) {

//배열의 크기 지정 변수
int size;

//외부 입력 받기 위한 Scanner 클래스 사용
Scanner sc = new Scanner(System.in);

//조건에 만족하는 인원수 받기
do {
System.out.print("인원수[5~10]");
size = sc.nextInt();
}while(size<5 || size>10);

//배열 준비
int[] scores = new int[size]; //점수 저장용
String[] names = new String[size]; //이름 저장용

//이름과 점수를 인우너수에 맞게 입력 받기
for (int i=0; i<scores.length; i++){
System.out.printf("%d번째 이름? ", i+1);
names[i]=sc.next(); //이름 입력 받는 부분
System.out.print("점수? ");
scores[i]=sc.nextInt(); //점수 입력 받는 부분
}
System.out.println();

//이름과 점수를 내림차순으로 정렬
for (int n=0; n<scores.length-1;n++){
for (int k=1; k<scores.length-n;k++){
if (scores[k-1]<scores[k]){
//점수 교환
int temp;
temp = scores[k-1];
scores[k-1] = scores[k];
scores[k] = temp;
//이름 교환
String name;
name = names[k-1];
names[k-1] = names[k];
names[k] = name;
}
}
}

//이름과 점수 출력
for (int i=0; i<scores.length; i++){
System.out.printf("%d등 %s : %d%n", i+1, names[i], scores[i]);
}
System.out.println();

}

}

--10명 이내의 이름. 점수 입력 받아서 평균이 높은 순으로 출력.
출력 예)
인원수[5~10]? 5
1번째 이름? kim
국어? 90
영어? 80
수학? 70
2번째 이름? lee
국어? 90
영어? 80
수학? 70
3번째 이름? park
국어? 90
영어? 80
수학? 70
4번째 이름? choi
국어? 90
영어? 80
수학? 70
5번째 이름? hong
국어? 90
영어? 80
수학? 70

1등 lee 평균 100
2등 hong 평균 95
3등 kim 평균 90
4등 park 평균 85
5등 choi 평균 80

import java.util.*;

public class Main {
public static void main(String[] args) {

int size;

//외부 입력 받기 위한 Scanner 클래스 사용
Scanner sc = new Scanner(System.in);

//조건에 만족하는 인원수 받기
do {
System.out.print("인원수[5~10]");
size = sc.nextInt();
}while(size<5 || size>10);

//배열 준비
int[] s1 = new int[size]; //점수 저장용
int[] s2 = new int[size]; //점수 저장용
int[] s3 = new int[size]; //점수 저장용
double[] scores = new double[size]; //평균 저장용
String[] names = new String[size]; //이름 저장용

//이름과 점수를 인우너수에 맞게 입력 받기
for (int i=0; i<scores.length; i++){
System.out.printf("%d번째 이름? ", i+1);
names[i]=sc.next(); //이름 입력 받는 부분
System.out.print("국어? ");
s1[i] =sc.nextInt();
System.out.print("영어? ");
s2[i]=sc.nextInt();
System.out.print("수학? ");
s3[i]=sc.nextInt(); //점수 입력 받는 부분

scores[i] = s1[i] + s2[i] + s3[i];
}
System.out.println();

//이름과 점수를 내림차순으로 정렬
for (int n=0; n<scores.length-1;n++){
for (int k=1; k<scores.length-n;k++){
if (scores[k-1]<scores[k]){
//점수 교환
double temp;
temp = scores[k-1];
scores[k-1] = scores[k];
scores[k] = temp;
//이름 교환
String name;
name = names[k-1];
names[k-1] = names[k];
names[k] = name;
}
}
}

//이름과 점수 출력
for (int i=0; i<scores.length; i++){
System.out.printf("%d등 %s : %.2f %n", i+1, names[i], scores[i]/3);
}
System.out.println();

}

}

 



이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공유하기 링크
Comments