27-java - 배열 문제들(심화)

jin·2022년 7월 2일
0

1. 그래프 세로

scoreList[] = {31, 76, 54, 2, 100, 23};
위 데이터는 학생 6명의 점수이다.		
위 데이터를 그래프로 표현해볼려고한다.
표시는 10의 자리숫자로 표현해서 개수만큼  * 로 출력할려고한다.
전에는 왼쪽에서 오른쪽으로 표현했지만 이번엔 아래서 위로 표현할려고한다.		
  
---------------------------------		                
                 *
                 *
                 *
        *        *
 	*        *
  	*  *     *
        *  *     *
     *  *  *     *
     *  *  *     *  *
     *  *  *     *  *
    31 76 54 2 100 23
---------------------------------	
int scoreList[] = { 31, 76, 54, 2, 100, 23 };
// 1. 맥스값 찾기
int max = 0;
for (int i = 0; i < scoreList.length; i++) {
	if (max < scoreList[i]) {
		max = scoreList[i];
	}
}
int loop = max/10;
int temp = 0;
int count = loop;

for (int i = 0; i < loop; i++) {
	for (int j = 0; j <scoreList.length; j++) {
		temp = scoreList[j];
		temp = temp/10;
		if (temp >= count) {
			System.out.print(" *  ");
		} else {
			System.out.print("    ");
		}
	}
	count--;
	
	System.out.println("\n");
}
System.out.println(Arrays.toString(scoreList));

y축 최대 반복수를 구한 후에 scoreList 배열의 각 값들의 몫을 구해 *을 출력해줬다.

아래는 선생님의 답안코드

int scoreList[] = { 31, 76, 54, 2, 100, 23 };
		
int[][] temp = new int[10][scoreList.length];
int y = temp.length;
int x = temp[0].length;
 System.out.println(y);
for (int i = 0; i < x; i++) {
	int score = scoreList[i] / 10; // 3;
	for (int j = 0; j < y - score; j++) {
		temp[j][i] = 1;
		System.out.println("y - score : "+(y-score)+ " "+Arrays.toString(temp[j]));
	}
	System.out.println();
}
System.out.println();
for (int i = 0; i < temp.length; i++) {
	System.out.println(Arrays.toString(temp[i]));
}

for (int i = 0; i < temp.length; i++) {
	for (int j = 0; j < temp[i].length; j++) {
		if (temp[i][j] == 1) {
			System.out.print("  ");
		} else {
			System.out.print("* ");
		}
		// System.out.print(temp[i][j]);
	}
	System.out.println();
}

temp배열에 그래프 출력에에 해당하는 부분을 1로 넣어주고 출력했다. 반복횟수는 많지만 눈으로 보이는 방법.

2. 도서연체

아래와 같은 데이터일때 도서 연체여부를 확인
int rentalPeriod = 70;
int [] rentalDay = {2020 , 12, 29};
int [] totay = {2021, 3, 10};

int rentalPeriod = 70;
int [] rentalDay = {2020 , 12, 29};
int [] today = {2021, 3, 10};

int monthList[] = {31, 28, 31, 30, 31, 31, 30,
		31 , 30 , 31 , 30 , 31};

int rentalSum = rentalDay[0] * 365;
int todaySum = today[0] * 365;
System.out.printf("rental %d / today %d\n", rentalSum, todaySum);

for (int i = 0; i < rentalDay[1] -1; i++) {
	rentalSum += monthList[i];
}
for (int i = 0; i < today[1]-1; i++) {
	todaySum += monthList[i];
}
System.out.printf("rental %d / today %d\n", rentalSum, todaySum);
rentalSum += rentalDay[2]+rentalPeriod;
todaySum += today[2];
System.out.printf("rental %d / today %d\n", rentalSum, todaySum);

int result = todaySum - rentalSum;
System.out.println(result);
if (result > 0) {
	System.out.println("연체");
} else {
	System.out.println("연체가 아님");
}

년,월을 포함한 전체 일수를 구한 다음 대여일+대여기간과 오늘 날짜를 비교

3. 사다리 게임

사다리 게임
1. 인덱스 0~4를 하나선택한다. (가로개수가 5개) 맨위 에서 부터 내려간다.
2. 숫자 0 을 만나면 그냥 아래로 내려간다.
3. 숫자 1 을 만나면 오른쪽으로 이동후 내려간다.
4. 숫자 2 를 만나면 완쪽으로 이동후 내려간다.
5. 오늘의 메뉴 출력

Scanner sc = new Scanner(System.in);
String menu[] = {"떡라면" , "돈까스" ,"짜장면" , "쫄면" , "된장찌개"};
int ladder[][]= {
		{0,0,0,0,0},
		{1,2,0,1,2},
		{0,1,2,0,0},
		{0,0,1,2,0},
		{1,2,0,1,2},
		{0,1,2,0,0},
		{0,1,2,0,0},
		{0,0,1,2,0},
		{0,0,0,0,0}
		};
System.out.print("사다리 픽 ");
int num = sc.nextInt();
System.out.println(ladder.length-1);
int row = 1; // row
int point = num-1; // col
while (true) {
	if (row == ladder.length-1) {
		System.out.println(menu[point]);
		break;
	}
	
	if (ladder[row][point] == 0) {
		System.out.println("0 - 아래로 한칸");
	} else if (ladder[row][point] == 1) {
		System.out.println("1 - 오른쪽으로 이동 후 한칸");
		point++;
	} else if (ladder[row][point] == 2) {
		System.out.println("2 - 왼쪽으로 이동 후 한칸");
		point--;
	}
	row++;
}

이차원 배열이라 이중 반복문을 써야할거 같았지만 실상은 아니었던 문제

0개의 댓글