배열 연습문제

강영우·2024년 2월 20일
0

연습 1

배열 arr의 모든 데이터에 대해서, 짝수데이터들의 평균과 홀수 데이터들의 평균을 출력하세요.

입출력예시

배열 arr : 1, 2, 3, 4, 5, 6, 7, 8, 9
결과
짝수평균: 5.0
홀수평균: 5.0

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
double sumEven = 0;
double sumOdd = 0;
int cntEven = 0;
int cntOdd = 0;
for(int item : arr){
	if(item % 2 ==0){
    	sumEven += item;
        cntEven++;
	} else{
    	sumOdd += item;
        cntOdd++;
	}
}
System.out.println("짝수평균"+ sumEven / cntEven);
System.out.println("홀수평균"+ sumOdd / cntOdd);

연습 2

배열 arr에서 target에 해당하는 값의 인덱스를 출력
해당값이 여러개인 경우 가장 큰 인덱스 출력

입출력예시

배열 arr : 1, 1, 100, 1, 1, 1, 100
target: 100
결과: 6

int target = 100;
int[] arr = {1, 1, 100, 1, 1, 1, 100};
for(int i = 0; i<arr.length; i--){
    if(arr[arr.length-1-i] == target){
        System.out.printf("결과: %d\n", arr.length-1-i);
        break;
    } else{
        System.out.println("값이 없습니다.");
    }
}

연습 3

배열 arr의 데이터순서를 거꾸로 변경하세요.
단, 추가배열을 사용하지 않는다.

입출력예시

arr: 1, 3, 5, 7, 9
결과: 9, 7, 5, 3, 1

int[] arr = {1, 3, 5, 7, 9};
for (int i =0; i <= arr.length / 2; i++) {
	int tmp = arr[i];
    arr[i] = arr[arr.length -1 -i];
    arr[arr.length -1 -i] = tmp;
}
System.out.println(Arrays.toString(arr));

연습 4

배열 arr에서 peek값 모두 출력
peek값이란 좌우보다 큰값을 의미하며, 배열의 처음과 끝은 각각 오른쪽, 왼쪽값만 비교한다.

입출력예시

arr: 3, 1, 2, 6, 2, 2, 5, 1, 9, 10, 1, 11
결과: 3, 6, 5, 10, 11

int[] arr = {3, 1, 2, 6, 2, 2, 5, 1, 9, 10, 1, 11};
for (int i= 0; i<arr.length; i++){
	if (i == 0 && arr[i+1]<arr[i]){
    	System.out.print(arr[i]+" ");
	} else if (i == arr.length-1 && arr[i-1]<arr[i]){
    	System.out.print(arr[i]+" ");
	} else {
    	if(arr[i-1] < arr[i] && arr[i+1] < arr[i]) {
        	System.out.print(arr[i]+" ");
		}
	}
}

연습 5

배열 arr값을 오름차순으로 출력

입출력 예시

arr: 5, 3, 1, 4, 6, 1
결과: 1, 1, 3, 4, 5, 6

int[] arr= {5, 3, 1, 4, 6, 1};
for(int j = 0; j< arr.length; j++) {
    for (int i = 0; i < arr.length - 1; i++) {
        if (arr[i] > arr[i + 1]) {
            int tmp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = tmp;
        }
    }
}
System.out.println(Arrays.toString(arr));

이러면 O(N2)O(N^2) 이라 개선이 필요해 보인다.

연습 6

배열 arr 에서 중복 값을 제거한 새 배열을 만드시오.

입출력예시

arr: 1, 5, 3, 2, 2, 3, 1, 4, 1, 2, 3, 5
결과: 1, 5, 3, 2, 4

int[] arr= {1, 5, 3, 2, 2, 3, 1, 4, 1, 2, 3, 5};
int[] result = new int[arr.length];
int cnt =0;

for(int i=0; i<arr.length; i++){
	boolean dupFlag = false;
	for(int j = 0; j<cnt; j++){
		if(arr[i] == result[j]){
        	dupFlag =true;
            }
    }
    if(dupFlag == false){
    	result[cnt++] = arr[i];
	}
}

for(int i=0; i<cnt; i++){
	System.out.print(result[i]+" ");
}

Set을 이용하면 쉽게 구현할수 있지만, 순수 배열을 통해 구현하였다.

연습 7

2차원 배열 arr 을 시계방향 90도 회전시킨 결과를 출력하세요.

입출력예시

arr:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
결과:
11 6 1
12 7 2
13 8 3
14 9 4
15 10 5

int[][] arr = {{1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11, 12, 13, 14, 15}};
System.out.println("arr.length:" +arr.length);
System.out.println("arr[0].length:" +arr[0].length);
int[][] result = new int[arr[0].length][arr.length];
for(int i = 0; i < arr.length; i++){
    for(int j = 0; j < arr[i].length; j++){
       result[j][arr.length-1-i] = arr[i][j];
    }
}
for (int i=0; i<result.length; i++){
    for(int j =0; j<result[i].length; j++){
        System.out.printf("%2d ",result[i][j]);
    }
    System.out.println();
}
profile
배움의 연속을 매순간 저장하는

0개의 댓글