연습문제_배열
2023. 2. 15. 18:47ㆍ자료구조/선형자료구조
< 언제 사용? > - 데이터 개수가 고정적이고 같은 종류의 데이터 저장. 순서 존재. 값 추가/삭제 번거로움.
1번.
문제: 배열 arr의 모든 데이터에 대해서, 짝수 데이터들의 평균과 홀수 데이터들의 평균 출력
예시)
배열 arr: 1,2,3,4,5,6,7,8,9
결과 => 짝수 평균: 5.0
홀수 평균: 5.0
public class quiz1 {
public static void main(String[] args) {
int[] arr ={1,2,3,4,5,6,7,8,9};
float sumEven = 0;
float sumOdd = 0;
int numEven = 0;
int numOdd = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 2 == 0) {
numEven++;
sumEven += arr[i];
} else {
numOdd++;
sumOdd += arr[i];
}
}
System.out.println("짝수 평균: " + sumEven/numEven);
System.out.println("홀수 평균: " + sumOdd/numOdd);
}
}
2번.
/*
배열 arr에서 target에 해당하는 값의 인덱스를 출력
해당 값이 여러 개인 경우 가장 큰 인덱스 출력
예시)
배열 arr: 1,1,100,1,1,1,100
target: 100
결과: 6
*/
public class quiz2 {
public static void main(String[] args) {
int[] arr = {1,1,100,1,1,1,100};
int index = -1;
int target = 100;
for (int i = 0; i < arr.length; i++) {
if (target <= arr[i]) {
target = arr[i];
index = i;
}
}
if (index != -1) {
System.out.println(index);
}
}
}
3번.
문제) 배열 arr의 데이터 순서를 거꾸로 변경하기
(추가 배열을 사용하지 않음)
예시)
arr: 1,3,5,7,9
결과: 9,7,5,3,1
import java.util.Arrays;
public class quiz3 {
public static void main(String[] args) {
int[] arr = {1,3,5,7,9};
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - (i + 1)];
arr[arr.length - (i + 1)] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
4번.
문제) 배열 arr에서 peek 값 모두 출력
예시)
arr: 3,1,2,6,2,2,5,1,9,10,1,11
결과: 3,6,5,10,11
public class quiz4 {
public static void main(String[] args) {
int[] arr = {3,1,2,6,2,2,5,1,9,10,1,11};
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
System.out.print(arr[i] + ", ");
}
if (i == arr.length - 2 && arr[i] < arr[i + 1]) {
System.out.print(arr[i + 1]);
}
}
System.out.println();
}
}
5번.
문제) 배열 arr의 값을 오름차순을 출력
예시)
arr: 5,3,1,4,6,1
결과: 1,1,3,4,5,6
public class quiz5 {
public static void main(String[] args) {
int[] arr = {5,3,1,4,6,1};
int[] visited = new int[arr.length];
int visitCnt = 0;
int minVal = Integer.MAX_VALUE;
int minIdx = -1;
while(visitCnt < arr.length) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] < minVal && visited[i] == 0) {
minVal = arr[i];
minIdx = i;
}
}
if (minIdx != -1) {
System.out.print(minVal + " ");
visited[minIdx] = 1;
visitCnt++;
}
minIdx = -1;
minVal = Integer.MAX_VALUE;
}
System.out.println();
}
}
6번.
문제) 배열의 중복값 제거
예시)
arr: 1,5,3,2,2,3,1,4,1,2,3,5
결과: 1,5,3,2,4
public class quiz6 {
public static void main(String[] args) {
int[] arr = {1,5,3,2,2,3,1,4,1,2,3,5};
int[] result = new int[arr.length];
int index = 0;
for (int i = 0; i < arr.length; i++) {
boolean exist = false;
for (int j = 0; j < index; j++) {
if (arr[i] == result[j]) {
exist = true;
break;
}
}
if (!exist) {
result[index++] = arr[i];
}
}
for (int i = 0; i < index; i++) {
System.out.print(result[i] + " ");
}
System.out.println();
}
}
7번.
문제) 2차원 배열을 시계방향 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
public class quiz7 {
static void printArr(int[][] result) {
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
int[][] arr = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
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[i].length - arr.length - i] = arr[i][j];
}
}
printArr(result);
}
}