휴먼교육센터 개발자과정 24일차

조하영·2022년 9월 2일
0

오후실습

package Tr;

public class Day07_01 {

public static void main(String[] args) {

	System.out.println("------1------");

// 1
// 가장 높은 점수를 획득한 사람의 점수와 이름을 출력하시오

	int[] point = { 20, 32, 12, 34, 24, 23 };
	String[] name = { "kim", "lee", "part", "chol", "choo", "ryu" };
	int max = 0;
	int nameIdx = 0;
	for (int i = 0; i < point.length; i++) {
		if (point[i] > max) {
			max = point[i];
			nameIdx = i;
		}
	}
	System.out.println(name[nameIdx] + ":" + max + "점");


	System.out.println("------2------");

// 2
// 위 문제에서
// 점수가 높으면 1등이다
// 1등부터 3등까지의 점수와 이름을 출력하시오.

	for (int j = 0; j < 3; j++) {
		for (int i = 0; i < point.length; i++) {
			if (point[i] > max) {
				max = point[i];
				nameIdx = i;
			}
		}
		System.out.println(j + 1 + "등-" + name[nameIdx] + ":" + max + "점");
		point[nameIdx] = -1;
		max = 0;
	}
	
	System.out.println("------3------");

// 3
int[] a = { 10, 0, 0, 30, 45, 0, 0, 60, 0, 0, 0, 0, 56, 0, 0, 0, 45 };
// 배열에서 0은 빈 땅이다. 이곳에 건물을 지으려고 한다.
// 0이 연속된 만큼을 땅의 크기라고 가정하자.
// 예를 들어 0이 3개 연속이라면 땅 크기는 3이다
// 땅의 크기가 3이상인 곳의 배열의 시작 인덱스를 출력하시오.

	for (int i = 0; i < a.length; i++) {
		int cnt = 0;// 연속적인 0의 갯수를 카운트할 변수 선언
		if (a[i] == 0) {
			cnt++;// 0을 만나면 바로 하나 증가
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] == 0) {
					cnt++;// 0뒤에 0이 연속으로 나올때마다 하나씩 더 카운트
				} else {
					break;
				}
			}
			if (cnt >= 3) {
				System.out.print(i + "번 ");
			}
			i = i + cnt - 1;
		}
	}
	System.out.println();

	System.out.println("------4------");

// 4
// 0은 빈땅이다. 가장큰 빈땅의 크기와 시작인덱스를 출력하시오.

	int max1 = 0;
	int idx = 0;
	for (int i = 0; i < a.length; i++) {
		int cnt = 0;// 연속적인 0의 갯수를 카운트할 변수 선언
		if (a[i] == 0) {
			cnt++;// 0을 만나면 바로 하나 증가
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] == 0) {
					cnt++;// 0뒤에 0이 연속으로 나올때마다 하나씩 더 카운트
				} else {
					break;
				}
			}
			if (cnt > max1) {
				max1 = cnt;
				idx = i;
			}
			i = i + cnt-1;
		}
	}
	System.out.println("가장 큰 땅 크기: " + max1);
	System.out.println("시작 인덱스: " + idx);

	System.out.println("------5------");

// 5
int[] a1 = { 10, 10, 0, 30, 45, 0, 0, 60, 60, 0, 0, 0, 56, 56, 56, 0, 45 };
// 숫자는 건물의 번호이고, 0은 빈땅이다.
// 건물의 번호가 같은 것은 건물의 크기가 1보다 크다는 것이다.
// 만약 10이 연속 2개 있다면 건물의 크기가 2라는 의미이다.
// 사이즈가 2이상인 건물의 번호와 크기를 모두 출력하시오

	int bSize = 1;
	for (int i = 0; i < a1.length; i++) {
		int cnt2 = 0;// 연속적인 숫자의 갯수를 카운트
		if (a1[i] != 0) {
			cnt2++;// 0이 아닌수를 만나면 바로 하나 증가
			for (int j = i + 1; j < a1.length; j++) {
				if (a1[j] == a1[i]) {
					cnt2++;// 앞의 수 뒤에 같은수가 연속으로 나올때마다 하나씩 더 카운트
				} else {
					break;
				}
			}
			if (cnt2 >= bSize) {
				System.out.println("건물번호:" + a1[i] + ", 건물크기:" + cnt2);
			}
			i = i + cnt2 - 1;// 중복되는 수만큼 건너뛰기
		}
	}
}

}

profile
공부하는 개발자

0개의 댓글