본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch05 확인 문제(array)

728x90
반응형

문제 7번

문제) 주어진 배열 항목에서 최대 값을 출력하는 코드를 작성해보세요(for문 이용)

int[] array = { 1, 5, 3, 8, 2 };​


정답코드)
public class ex07 {
	public static void main(String[] args) {
		
		int[] array = { 1, 5, 3, 8, 2 };
		int max = 0;
		
		for(int i=0; i<array.length; i++) {
			if(array[i] > max) {
				max = array[i];
			}
		}
		System.out.println("최댓값 : " + max);
	}
}

// 최댓값 : 8

해설)
1. max 변수를 하나 생성한 후 array[i] 값과 배열 길이만큼 비교를 해줍니다.
2. 만약 array[i] 값이 max보다 크면 max에 array[i] 값을 저장합니다.
3. 최종적으로 max 값을 출력합니다.

 

 

문제 8번

문제) 주어진 배열 항목의 전체 합과 평균을 구해 출력하는 코드를 작성해보세요(중첩 for문 이용)
int[][] array = {
		{95, 86},
		{83, 92, 96},
		{78, 83, 93, 87, 88}
};​


정답코드)
public class ex08 {
	public static void main(String[] args) {
		
		int[][] array = {
				{95, 86},
				{83, 92, 96},
				{78, 83, 93, 87, 88}
		};
		
		int sum = 0;
		int num = 0;
		
		for(int i=0; i<array.length; i++) {
			for(int j=0; j<array[i].length; j++) {
				sum += array[i][j];
				num ++;
			}
		}
				
		System.out.println("합계 : " + sum);
		System.out.println("평균 : " + (double)sum/num);
	}
}​


해설)
1. 합계를 구하는 sum 변수와, 배열 안의 숫자 개수를 구하는 num 변수를 지정합니다.
2. 중복 for문을 이용해 sum에 모든 값들이 저장되도록하고 num은 1씩 증가되도록 합니다.
3. 최종적으로 합계와 평균을 출력해줍니다.

 

 

문제 9번

문제) 학생들의 점수를 분석하는 프로그램을 만들려고 합니다. 키보드로부터 학생 수와 각 학생들의 점수를 입력받고 while 문과 Scanner의 nextLine() 메소드를 이용해서 최고 점수 및 평균 점수를 출력하는 코드를 작성해보세요.

출력)
-------------------------------------------------
1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료
-------------------------------------------------
선택> 1
학생수> 3
-------------------------------------------------
1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료
-------------------------------------------------
선택> 2
scores[0]> 85
scores[1]> 95
scores[2]> 93
-------------------------------------------------
1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료
-------------------------------------------------
선택> 3
scores[0] : 85
scores[1] : 95
scores[2] : 93
-------------------------------------------------
1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료
-------------------------------------------------
선택> 4
최고 점수 : 95
평균 점수 : 91.0
-------------------------------------------------
1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료
-------------------------------------------------
선택> 5
프로그램 종료

정답코드)
import java.util.Scanner;

public class ex09 {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		int[] scores = new int[] {};
		
		while(true) {
			System.out.println("-------------------------------------------------");
			System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 "
					+ "| 5. 종료");            
			System.out.println("-------------------------------------------------");
			
			System.out.print("선택> ");
			String ch = sc.next();
			
			if(ch.equals("5")) break;			
			
			switch(ch) {
				case "1":
					System.out.print("학생수> ");
					int a = sc.nextInt();
					scores = new int[a];
					break;
				case "2":
					for(int i=0; i<scores.length; i++) {
						System.out.print("scores[" + i + "]: ");				
						scores[i] = sc.nextInt();
					}
					break;
				case "3":
					for(int i=0; i<scores.length; i++) {
						System.out.println("scores[" + i + "]: " + scores[i]);				
					}
					break;
				case "4":
					int sum = 0;
					int max = 0;

					for(int i=0; i<scores.length; i++) {
						if(scores[i] > max) {
							max = scores[i];
						}
						sum += scores[i];
					}
					System.out.println("최고 점수 : " + max);
					System.out.println("평균 점수 : " + (double)sum/scores.length);
					break;
			}
		}
		System.out.println("프로그램 종료");
	}
}​


해설)
1. socores라는 int 배열을 초기화 시켜줍니다.
2. while을 이용해서 원하는 문구를 지속해서 출력할 수 있도록 만듭니다.
3. ch 변수를 이용해 원하는 문자열을 입력 받아 switch문과 연결합니다.
4. switch문에 case는 아래와 같이 진행합니다.
  (1) case "1" : 새로운 변수 a를 입력받아 배열의 크기를 만듭니다.(학생 수 지정)
  (2) case "2" : for문을 이용해 배열 크기(학생 수)만큼 점수를 입력할 수 있게 만듭니다.
  (3) case "3" : for문을 이용해 배열 전체 값들을 출력하도록 만듭니다.
  (4) case "4" : 이전 문제들에서 했던 것과 같이 max와 평균을 출력하도록 만듭니다.
5. 만약 ch 값이 5라면 whlile문을 벗어나게 만듭니다.

 

이렇게 array와 관련된 확인 문제들도 풀어보았습니다.

 

array함수는 여러 값들을 사용해야하는 문제들을 풀 때 대부분 사용하므로 아주 중요합니다!

 

좀 더 능숙하게 다룰 수 있도록 노력해야겠어요!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형