반응형
- 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 |