코딩/2-JAVA

C0909이차배열과데이터

tree0505 2025. 6. 27. 10:09
반응형
  • C0909이차배열과데이터

  • C0909개념01이차배열과데이터
    • 시험지를 나눠주는데. s자로 나눠주는것 
    • 랜덤으로 시험지 장수를 정해서 
package C0909이차배열과데이터;

import java.util.Random;

/*
	[문제]
		아래 2차원배열은 3학년 1반의 학생 수를 표현한 것으로
		세로4 가로5의 총 학생 수는 20명이다.
		배열 안의 각각의 값들은 각 학생별 시험을 보기위한 필요 페이지 수이다.
		학생마다 필요한 페이지 수가 다르다.
		
		시험지를 인덱스 위치(0,0)부터 나눠주려 할 때
		지그재그의 형태로 전달하려한다.
		
		첫 번째 줄은 앞에서부터 뒤로 이동한다.			3, 1, 5, 4, 1
		두 번째 줄은 뒤에서부터 앞으로 이동한다.			8, 2, 4, 6, 1
		다시 세 번째 줄은 앞에서부터 뒤로 이동한다.		2, 3, 5, 5, 2
		다시 네 번째 줄은 뒤에서부터 앞으로 이동한다.		2, 1, 7, 1, 6
		
		랜덤으로 학생수(1~20)를 저장하고,
		각 학생별로 필요한 페이지 수의 합을 출력한다.
		
		예) 랜덤숫자 : 7	=> {3 + 1 + 5 + 4 + 1} + {8 + 2} = 24
		예) 랜덤숫자 : 12	=> {3 + 1 + 5 + 4 + 1} + {8 + 2 + 4 + 6 + 1} + {2 + 3} = 40
 */

public class C0909개념01이차배열과데이터 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int[][] arr = {
			{3,1,5,4,1},	// 0 짝수행(앞)
			{1,6,4,2,8},	// 1 홀수행(뒤)
			{2,3,5,5,2},	// 2
			{6,1,7,1,2},	// 3
		};
		
		/*
			0행		0 1 2 3 4
			1행		4 3 2 1 0
			2행		0 1 2 3 4
			3행		4 3 2 1 0
		 */
		
		for(int i=0; i<4; i++) {
			if(i % 2 == 0) {
				for(int j=0; j<5; j++) {
//					System.out.print(j + " ");
					System.out.print(arr[i][j] + " ");
				}
			} else {
				for(int j=4; j>=0; j--) {
//					System.out.print(j + " ");
					System.out.print(arr[i][j] + " ");
				}
			}
			System.out.println();
		}
		
		int r = ran.nextInt(20) + 1;
		r = 12;
		System.out.println("랜덤 숫자 : " + r);
		
		int total = 0;
		int count = 0;
		for(int i=0; i<arr.length; i++) {
			if(i % 2 == 0) {
				for(int j=0; j<arr[i].length; j++) {
					System.out.print(arr[i][j] + " ");
					total += arr[i][j];
					count += 1;
					
					if(count == r) {
						//i = 100;
						break;
					}
				}
			} else {
				for(int j=arr[i].length - 1; j>=0; j--) {
					System.out.print(arr[i][j] + " ");
					total += arr[i][j];
					count += 1;
					
					if(count == r) {
						//i = 100;
						break;
					}
				}
			}
			if(count == r) {
				break;
			}
			System.out.println();
		}
		System.out.println();
		System.out.println(total);
		
	}
}

  • C0909이차배열과데이터_개념연습

  • C0909개념연습01
package C0909이차배열과데이터_개념연습;

import java.util.Random;

/*
	[문제]
		아래 2차원배열은 3학년 1반의 학생 수를 표현한 것으로
		세로4 가로5의 총 학생 수는 20명이다.
		배열 안의 각각의 값들은 각 학생별 시험을 보기위한 필요 페이지 수이다.
		학생마다 필요한 페이지 수가 다르다.
		
		시험지를 인덱스 위치(0,0)부터 나눠주려 할 때
		지그재그의 형태로 전달하려한다.
		
		첫 번째 줄은 앞에서부터 뒤로 이동한다.			3, 1, 5, 4, 1
		두 번째 줄은 뒤에서부터 앞으로 이동한다.			8, 2, 4, 6, 1
		다시 세 번째 줄은 앞에서부터 뒤로 이동한다.		2, 3, 5, 5, 2
		다시 네 번째 줄은 뒤에서부터 앞으로 이동한다.		2, 1, 7, 1, 6
		
		랜덤으로 학생수(1~20)를 저장하고,
		각 학생별로 필요한 페이지 수의 합을 출력한다.
		
		예) 랜덤숫자 : 7	=> {3 + 1 + 5 + 4 + 1} + {8 + 2} = 24
		예) 랜덤숫자 : 12	=> {3 + 1 + 5 + 4 + 1} + {8 + 2 + 4 + 6 + 1} + {2 + 3} = 40
 */

public class C0909개념연습01 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int[][] arr = {
			{3,1,5,4,1},	// 0 짝수행(앞)
			{1,6,4,2,8},	// 1 홀수행(뒤)
			{2,3,5,5,2},	// 2
			{6,1,7,1,2},	// 3
		};
		
		/*
			0행		0 1 2 3 4
			1행		4 3 2 1 0
			2행		0 1 2 3 4
			3행		4 3 2 1 0
		 */
		
		for(int i=0; i<4; i++) {
			if(i % 2 == 0) {
				for(int j=0; j<5; j++) {
//					System.out.print(j + " ");
					System.out.print(arr[i][j] + " ");
				}
			} else {
				for(int j=4; j>=0; j--) {
//					System.out.print(j + " ");
					System.out.print(arr[i][j] + " ");
				}
			}
			System.out.println();
		}
		
		int r = ran.nextInt(20) + 1;
		r = 12;
		System.out.println("랜덤 숫자 : " + r);
		
		int total = 0;
		int count = 0;
		for(int i=0; i<arr.length; i++) {
			if(i % 2 == 0) {
				for(int j=0; j<arr[i].length; j++) {
					System.out.print(arr[i][j] + " ");
					total += arr[i][j];
					count += 1;
					
					if(count == r) {
						i = 100;
						break;
					}
				}
			} else {
				for(int j=arr[i].length - 1; j>=0; j--) {
					System.out.print(arr[i][j] + " ");
					total += arr[i][j];
					count += 1;
					
					if(count == r) {
						i = 100;
						break;
					}
				}
			}
			System.out.println();
		}
		System.out.println(total);
		
	}
}

  • C0909개념연습02
package C0909이차배열과데이터_개념연습;

/*
	[문제]
		nameList배열은 상품의 이름을,
		dataList는 각각 가격과 상품의 개수를 의미한다.
		현재 재고 수량은 새우깡 3개, 감자깡 1개, 고래밥 1개이다.
		아래 input 배열은 오늘 주문이 들어온 순서이다.
		총 매출을 출력해보시오.
		
	[정답]
		주문은 총 새우깡 2개, 감자깡 3개, 고래밥 3개가 들어왔지만,
		실제 판매한 품목은 새우깡 2개, 감자깡 1개, 고래밥 1개이다.
		7400원
*/

public class C0909개념연습02 {
	public static void main(String[] args) {
		
		String[] nameList = {"새우깡", "감자깡", "고래밥"};
		int[][] dataList = {
			{1000, 3},
			{2300, 1},
			{3100, 1}
		};
		int[] input = {1, 2, 2, 0, 0, 2, 1, 1};
		
		/*
			i = 0	
				dataList[1][1] > 0	true	
				total = 0 + 2300	
				dataList[1][1](0)
				{1000, 3},
				{2300, 0},
				{3100, 1}
			i = 1
				dataList[2][1] > 0	true	
				total = 2300 + 3100	
				dataList[2][1](0)
				{1000, 3},
				{2300, 0},
				{3100, 0}
			i = 2
				dataList[2][1] > 0	false	
			i = 3
				dataList[0][1] > 0	true	
				total = 5400 + 1000	
				dataList[0][1](2)
				{1000, 2},
				{2300, 0},
				{3100, 0}			
			i = 4
				dataList[0][1] > 0	true	
				total = 6400 + 1000	
				dataList[0][1](1)
				{1000, 1},
				{2300, 0},
				{3100, 0}	
			i = 5
				dataList[2][1] > 0	false		
			i = 6
				dataList[1][1] > 0	false		
			i = 7
				dataList[1][1] > 0	false		
		 */
		
		int total = 0;
		for(int i=0; i<input.length; i++) {
			
			if(dataList[input[i]][1] > 0) {
				total += dataList[input[i]][0];
				dataList[input[i]][1] -= 1;
			}
		}
		System.out.println(total);
		
	}
}

  • C0909개념연습03
package C0909이차배열과데이터_개념연습;

import java.util.Arrays;
import java.util.Random;

/*
	[문제]
		아래 배열에 숫자1 또는 숫자2를 랜덤으로 가득 채운다.
		가로 세로 대각선이 연속으로 한 줄이 되면 빙고이다.
		각 숫자별로 빙고가 몇 개인지 출력하시오.
	[예시]
 	  	1122
 	  	2122
 	  	1112
 	  	2111
 	  
 	  	빙고 1 : 2개
	  	빙고 2 : 0개			
*/

public class C0909개념연습03 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int size = 4;
		
		int[][] bingo = new int[size][size];
		
		for(int i=0; i<size; i++) {
			for(int j=0; j<size; j++) {
				bingo[i][j] = ran.nextInt(2) + 1;
			}
		}
		
		/*
		int[][] bingo = {
			[2, 2, 1, 1]
			[2, 1, 2, 2]
			[2, 1, 2, 1]
			[2, 2, 2, 1]
		};
		 */
		
		for(int i=0; i<size; i++) {
			System.out.println(Arrays.toString(bingo[i]));
		}
		
		int bingo1 = 0;
		int bingo2 = 0;
		// 가로
		for(int i=0; i<size; i++) {
			int count1 = 0;
			int count2 = 0;
			for(int j=0; j<size; j++) {
				if(bingo[i][j] == 1) {
					count1 += 1;
				}
				if(bingo[i][j] == 2) {
					count2 += 1;
				}
			}
			
			if(count1 == size) bingo1 += 1;
			if(count2 == size) bingo2 += 1;
		}
		
		// 세로
		for(int i=0; i<size; i++) {
			int count1 = 0;
			int count2 = 0;
			for(int j=0; j<size; j++) {
				if(bingo[j][i] == 1) {
					count1 += 1;
				}
				if(bingo[j][i] == 2) {
					count2 += 1;
				}
			}
			if(count1 == size) bingo1 += 1;
			if(count2 == size) bingo2 += 1;
		}
		
		// 대각선 \
		if(bingo[0][0] == 1 && bingo[1][1] == 1 && bingo[2][2] == 1 && bingo[3][3] == 1) bingo1 += 1;
		if(bingo[0][0] == 2 && bingo[1][1] == 2 && bingo[2][2] == 2 && bingo[3][3] == 2) bingo2 += 1;
		
		// 대각선 /
		if(bingo[3][3] == 1 && bingo[1][2] == 1 && bingo[2][1] == 1 && bingo[3][0] == 1) bingo1 += 1;
		if(bingo[3][3] == 2 && bingo[1][2] == 2 && bingo[2][1] == 2 && bingo[3][0] == 2) bingo2 += 1;
		
		System.out.println("빙고1 : " + bingo1 + "개");
		System.out.println("빙고2 : " + bingo2 + "개");
		
	}
}

  • C0909개념연습04
package C0909이차배열과데이터_개념연습;

import java.util.Random;

/*
	[문제]
		10회 반복을 하면서 1~50의 랜덤값을 출력한다.
		랜덤값이 배열에 있으면 해당 위치를 출력하고,
		랜덤값이 배열에 없으면 "없다"를 출력하시오.
	[예시]
		43 ==> y : 0, x : 1
		45 ==> 없다.
		21 ==> y : 1, x : 4
		28 ==> y : 4, x : 2
		2 ==> y : 0, x : 2
		20 ==> 없다.
		6 ==> y : 2, x : 4
		29 ==> 없다.
		19 ==> y : 4, x : 0
		25 ==> 없다.		
*/

public class C0909개념연습04 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int[][] darr = {
			{1, 43, 2, 5,41},
			{11,13,23,14,21},
			{34,12,17,22, 6},
			{18,47, 4, 3, 7},
			{19,48,28,15, 46},
		};
		
		for(int i=0; i<10; i++) {
			int r = ran.nextInt(50) + 1;
			System.out.print(r + " ==> ");
			
			boolean check = false;
			for(int j=0; j<darr.length; j++) {
				for(int k=0; k<darr[j].length; k++) {
					if(r == darr[j][k]) {
						System.out.println("y = " + j + ", x = " + k);
						check = true;
					}
				}
			} 
			
			if(check == false) {
				System.out.println("없다.");
			}
			
		}
		
		
		
	}
}

  • C0909개념연습05
package C0909이차배열과데이터_개념연습;

import java.util.Arrays;

/*
	[문제]
		아래 mine배열의 숫자 0의 자리에
		주변 8방향을 검사 해 9의 개수를 저장하고 출력하시오.
	[정답]
	 	{2, 9, 2},
	 	{9, 4, 9},
	 	{1, 3, 9}
*/

public class C0909개념연습05 {
	public static void main(String[] args) {
		
		int[][] mine = {
			{0, 9, 0},
			{9, 0, 9},
			{0, 0, 9}
		};
		
		/*
		 	[-1,-1], [-1,0], [-1,1]
			[ 0,-1], [ 0,0], [ 0,1]
			[ 1,-1], [ 1,0], [ 1,1]
		*/
		
		for(int i=-1; i<=1; i++) {
			for(int j=-1; j<=1; j++) {
				System.out.printf("[%d,%d]\t", i, j);
			}
			System.out.println();
		}
		
		int size = mine.length;
		
		for(int i=0; i<size; i++) {
			for(int j=0; j<size; j++) {
				
				// mine배열의 값이 0인 곳만 검사를 진행
				if(mine[i][j] == 0) {
					
					int count = 0;
					// 8방향을 검사를 진행
					for(int y=-1; y<=1; y++) {
						if(size <= i + y || i + y < 0) continue;
						for(int x=-1; x<=1; x++) {
							if(size <= j + x || j + x < 0) continue;
							
							if(mine[i + y][j + x] == 9) {
								count += 1;
							}
						}
					}
					
					mine[i][j] = count;
				}
				
			}
		}
		
		for(int i=0; i<size; i++) {
			System.out.println(Arrays.toString(mine[i]));
		}
		
	}
}

  • C0909개념연습06
package C0909이차배열과데이터_개념연습;

import java.util.Arrays;
import java.util.Random;

/*
	[문제]
		말 다섯 마리가 20개의 트랙을 달린다.
		매 회 랜덤으로 1~4칸의 거리를 이동할 수 있다.
		다섯 말이 모두 도착하면 게임은 끝난다.
		각 말들의 순위를 출력하시오.
		단, 말이 동시에 도착하면 등수는 같다.
*/

public class C0909개념연습06 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int horseCount = 5;
		int raceCount = 20;
		
		int[][] horse = new int[horseCount][raceCount];
		int[] total = new int[horseCount];
		
		for(int i=0; i<raceCount; i++) {
			for(int j=0; j<horseCount; j++) {
				if(total[j] <= raceCount - 1) {
					horse[j][i] = ran.nextInt(4) + 1;
					total[j] += horse[j][i];
				}
			}
		}
		for(int i=0; i<horseCount; i++) {
			System.out.println(Arrays.toString(horse[i]));
		}
		
		int[] rankList = new int[horseCount];
		int[][] printRace = new int[horseCount][raceCount];
		int[] printTotal = new int[horseCount];
		
		int rank = 1;
		for(int i=0; i<raceCount; i++) {
			
			int exit = 0;
			int count = 0;
			boolean check = false;
			for(int j=0; j<horseCount; j++) {
				
				if(rankList[j] > 0) {
					printRace[j][19] = 1;
					exit += 1;
					continue;
				}
				
				if(printTotal[j] + horse[j][i] >= raceCount - 1 && check == false) {
					rankList[j] = rank++;
					check = true;
					printTotal[j] = 19;
					printRace[j][19] = 1;
					exit += 1;
				} else if(printTotal[j] + horse[j][i] >= raceCount - 1 && check == true) {
					rankList[j] = rank - 1;
					count += 1;
					printTotal[j] = 19;
					printRace[j][19] = 1;
					exit += 1;
				} else {
					printTotal[j] += horse[j][i];
					printRace[j][printTotal[j]] = 1;
				}
			}
			rank += count;
			
			if(exit == horseCount) {
				
				for(int j=0; j<horseCount; j++) {
					for(int k=0; k<raceCount; k++) {
						if(printRace[j][k] == 1) {
							System.out.print("[말]");
						} else {
							System.out.print("[ ]");
						}
					}
					System.out.println("[" + rankList[j] + "]");
				} 
				System.out.println();
				
				break;
			}
			
			System.out.println("exit = " + exit);
			System.out.println(Arrays.toString(rankList));
			for(int j=0; j<horseCount; j++) {
				for(int k=0; k<raceCount; k++) {
					if(printRace[j][k] == 1) {
						System.out.print("[말]");
					} else {
						System.out.print("[ ]");
					}
				}
				System.out.println();
			} 
			System.out.println();
			
//			try {
//				Thread.sleep(1000);
//			} catch (InterruptedException e) {
//				e.printStackTrace();
//			}
			
			for(int j=0; j<horseCount; j++) {
				printRace[j][printTotal[j]] = 0;
			}
			
			
		}
		
		
	}
}

  • C0909개념연습07
package C0909이차배열과데이터_개념연습;

import java.util.Arrays;
import java.util.Random;

/*
	[문제]
		복권 1개 당 7칸으로, 총 5개의 복권을 제작하려 한다.
		복권 1줄은 1 또는 7의 랜덤 숫자로 구성되어 있다.
		7이 연속으로 3개이상이면 "당첨"이고, 그 미만은 "꽝" 이다.
		5개 중에 딱 1개만 당첨 복권이고 나머지 4개는 꽝인 복권을
		랜덤으로 생성해서 출력하시오.
	[예시]
		1177117 (꽝)
		1117771 (당첨)
		7171117 (꽝)
		7711771 (꽝)
		7171717 (꽝)
*/

public class C0909개념연습07 {
	public static void main(String[] args) {
		
		Random ran = new Random();
		
		int[][] lottoSet = new int[5][7];
		
		boolean mark = false;
		for(int i=0; i<5; i++) {
			boolean check = false;
			int count = 0;
			for(int j=0; j<7; j++) {
				int r = ran.nextInt(2);
				if(r == 0) {
					lottoSet[i][j] = 1;
					count = 0;
				} else {
					lottoSet[i][j] = 7;
					count += 1;
					if(count == 3) {
						check = true;
					}
				}
			}
			
			// 당첨 복권이 처음 나왔으면,
			if(check == true && mark == false) {
				mark = true;
			}
			// 당첨 복권이 두 번째로 나오면,
			else if(check == true && mark == true) {
				i -= 1;
			}
			
			// 당첨 복권이 한번도 X
			if(i == 4 && mark == false) {
				// 리셋
				i = -1;
			}
		}
		
		for(int i=0; i<5; i++) {
			System.out.print(Arrays.toString(lottoSet[i]));
			
			boolean check = false;
			int count = 0;
			for(int j=0; j<7; j++) {
				if(lottoSet[i][j] == 7) {
					count += 1;
				} else {
					count = 0;
				}
				if(count == 3) {
					check = true;
				}
			}
			if(check) {
				System.out.println("(당첨)");
			} else {
				System.out.println("(꽝)");
			}
		}
		
	}
}

  • C0909개념연습08
package C0909이차배열과데이터_개념연습;

/*
	1. machine 배열은 인형뽑기 기계의 데이터이다. (7 x 5)
	2. 인형의 번호는 다음과 같다.
		[1 : 호랑이] [2 : 곰] [3 : 사자] [4 : 기린]
		1) 숫자 0은 비어있는 곳을 의미한다.
		2) 숫자 0이 아닌 곳은 인형이 있는 것을 뜻하고 숫자는 인형번호이다.
		3) input의 데이터는 오늘 손님들이 인형을 선택한 인덱스번호이다.
		4) 세로 단위로 한 라인이고, 인덱스 번호는 가로로 선택이 된다.
		   즉, 0 ~ 4번까지 가능하다.
		5) 인형은 각 라인별 맨 위에서부터 뽑히게 된다.
		   예) input의 값이 1일 때, [2, 1, 4, 1, 1] 라인에 해당하고, 
		   	   인형이 선택되어 맨 위의 2는 0이 된다.
		6) 만약에 전부 값이 0인 라인을 선택하게 되면, "꽝"을 출력한다.
		7) 오늘 판매된 인형의 이름을 출력하시오.
	[정답]
		1 ==> [2:곰]
		0 ==> [3:사자]
		0 ==> [1:호랑이]
		3 ==> [3:사자]
		3 ==> [0:꽝]
		4 ==> [3:사자]
		4 ==> [3:사자]
 */

public class C0909개념연습08 {
	public static void main(String[] args) {
		
		int[][] machine = {
				{0,0,0,0,0},
				{0,0,0,0,3},
				{0,2,0,0,3},
				{3,1,3,0,1},
				{1,4,2,0,2},
				{4,1,4,0,4},
				{2,1,4,3,3}
			};
			
			String[] nameList = {"호랑이", "곰", "사자", "기린"};
			int[] input = {1,0,0,3,3,4,4};		
			
			for(int i=0; i<input.length; i++) {
				int check = -1;
				for(int j=0; j<machine.length; j++) {
					if(machine[j][input[i]] > 0) {
						check = j;
						break;
					}
				}
				
				if(check == -1) {
					System.out.println("꽝");
				} else {
					int index = machine[check][input[i]];
					System.out.println(nameList[index - 1]);
					machine[check][input[i]] = 0;
				}
			}	
		
	}
}
반응형

'코딩 > 2-JAVA' 카테고리의 다른 글

C0911어레이리스트  (0) 2025.06.27
C0910이차배열입력  (0) 2025.06.27
C0907이차원메모리구조 , C0908행렬  (0) 2025.06.26
C0906일차원메모리구조  (1) 2025.06.26
C0903정렬 , C0904이차배열완전탐색 , C0905그룹바이  (3) 2025.06.25