30-java - 배열 문제들_2 심화

jin·2022년 7월 2일
0

1. 복권제작

[복권제작]
1. lottoSet 배열은 5 * 7 사이즈 배열이다.
2. 복권1개당 7줄이고 , 총 5개의 복권을 만들려고 한다.
3. 복권 1줄의 내용은 1또는 7을 랜덤을 저장한다.
4. 복권 1줄은 7이 연속으로 3개이상이면 "당첨" 이고 그 미만은 "꽝" 이다.
5. 5개 복권중에 1개만 당첨이고 4개는 꽝인 복권을 랜덤으로 생성해보자.

예) 아래와 같이 한줄만 "당첨" 이고 나머지 4개는 "꽝"이다.
1177117 (꽝)
1117771 (당첨)
7171117 (꽝)
7711771 (꽝)
7171717 (꽝)

Random rnd = new Random();
int[][] lottoSet = new int[5][7];

int rNum = 0;
int index = rnd.nextInt(lottoSet[0].length-4);
int win = rnd.nextInt(lottoSet.length-1);
System.out.printf("win %d, index %d\n", win, index);

for (int i = 0; i < lottoSet.length; i++) {
	int count = 0;
	for (int j = 0; j <lottoSet[i].length; j++) {
		rNum = rnd.nextInt(2); 
		if (win == i) {
			if ( index <= j && index+2 >= j ) {
				lottoSet[i][j] = 7;
				continue;
			} else if (rNum == 0) {
				lottoSet[i][j] = 7;
			} else {
				lottoSet[i][j] = 1;
			}
		} else {
			if (count == 1) {
				count = 0;
				lottoSet[i][j] = 1;
				continue;
			}
			if (rNum == 0) {
				lottoSet[i][j] = 7;
				count++;
			} else {
				lottoSet[i][j] = 1;
			}
		}
	}
	System.out.println(Arrays.toString(lottoSet[i]));
}

매번 실행때 당첨복권의 위치가 다르게 만들어야해서 조건문으로 당첨 복권의 경우를 지정해주고 3개가 연속되어야하므로 복권 행에 해당하는 인덱스 -3의 크기만큼 지정을해 무조건 7이 3개 이상 들어갈 수 있도록 코드를 작성했다.
낙첨의 경우 count로 수를 세주고 7이 들어가지 않도록 했다.

2. 인형뽑기1

아래 배열은 인형뽑기 기계의 데이터 이다. (7 x 5) 사이즈
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},
};

[인형번호][1 : 호랑이] [2 : 곰][3 : 사자] [4 : 기린]

[machine][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:사자]

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},
};
int input[] = { 1, 0, 0, 3, 3, 4, 4 }; // x축
for (int i = 0; i < input.length; i++) {
	int index = input[i];
	int select = -1;
	for (int j = 0; j < machine.length; j++) {
		if (machine[j][index] != 0) {
			select = machine[j][index];
			machine[j][index] = 0;
			break;
		}
	}

	System.out.printf("index : %d, select : %d\n",index, select);
	switch (select) {
		case 1: System.out.println("[1]호랑이"); break;
		case 2: System.out.println("[2]곰"); break;
		case 3: System.out.println("[3]사자"); break;
		case 4: System.out.println("[4]기린"); break;
		default: System.out.println("[0] 꽝"); break;
	}
	
	for (int j = 0; j < machine.length; j++) {
		System.out.println(Arrays.toString(machine[j]));
	}
	System.out.println("=======================");
}

input 배열이 x축을 담당하고 y축만큼 진행할때 0이 아닌 수를 만나면 인형이니 해당 값을 저장하면 되는 문제

3. 인형뽑기 2

[인형번호][1 : 호랑이] [2 : 곰][3 : 사자] [4 : 기린]


  • [1] 숫자 0 은 비어있는것을뜻한다.
    [2] 숫자 0 이 아닌곳은 인형이 있는것을 뜻하고 숫자는 인형번호이다.
    [3] input의 데이터는 오늘 손님들이 인형을 선택한 인덱스번호이다.
    [4] 세로단위로 한라인이고, 인덱스번호는 가로로 선택이 된다. (예 0~4번까지 가능)
    [5] 인형은 각라인별 아래서 부터뽑힌다. 매아래가 뽑히므로 전부 한칸씩 내려온다.
    예) input ==> 1 ==> 2,1,4,1,1 라인이고 맨아래 1 이 뽑히면 2,1,4,1 이된다.
    [6] 만약에 전부 값이 0인 라인을 선택하게되면, "꽝" 출력
    [7] 오늘 판매된 인형 이름을 출력하시요.
    예)
    1 ==> [1:호랑이]
    0 ==> [2:곰]
    0 ==> [4:기린]
    3 ==> [3:사자]
    3 ==> [0:꽝]
    4 ==> [3:사자]
    4 ==> [4:기린]
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},
		};
int input[] = { 1, 0, 0, 3, 3, 4, 4 }; // x축

for (int i = 0; i < input.length; i++) {
	int index = input[i];
	int count = 0;
	int select = 0;
	int row = machine.length-1;
	for (int j = 0; j < machine.length; j++)  {
		if (machine[j][index] != 0) {
			count++;
		}
	}
	
	System.out.println(count);
	select = machine[row][index];
	for (int j = 0; j < count; j++) {
		machine[row][index] = machine[row-1][index];
		row--;
	}
	System.out.printf("index : %d, select : %d\n",index, select);
	switch (select) {
		case 1: System.out.println("[1]호랑이"); break;
		case 2: System.out.println("[2]곰"); break;
		case 3: System.out.println("[3]사자"); break;
		case 4: System.out.println("[4]기린"); break;
		default: System.out.println("[0] 꽝"); break;
	}


	for (int j = 0; j < machine.length; j++) {
		System.out.println(Arrays.toString(machine[j]));
	}
	System.out.println("=======================");
}

y축을 구하지 않고 코드를 작성했는데 답안코드를 보니 좀 어렵게 접근하게 된것 같다.

아래는 답안코드

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},
};
int input[] = {1,0,0,3,3,4,4};

for(int i = 0; i < input.length;i++) {
	int x = input[i];
	int y = machine.length-1;
	
	if(machine[y][x] == 0) {
		System.out.println("[꽝]");
	}else {
		//[1 : 호랑이] [2 : 곰] [3 : 사자] [4 : 기린]
		if(machine[y][x] == 1) {
			System.out.println("호랑이");  
		}else if(machine[y][x] == 2) {
			System.out.println("곰");  
		}else if(machine[y][x] == 3) {
			System.out.println("사자");  
		}else if(machine[y][x] == 4) {
			System.out.println("기린");  
		}
		
		// 이제 한칸씩 내려준다.
		for(int j = y; j >= 1 ; j--) {
			machine[j][x] = machine[j-1][x]; 
		}
		
	}
}

y,x 값을 구해주면 좀 더 편하게 풀 수 있다.

0개의 댓글