1. 빙고
public class NumberBingo {
final private static int SIZE = 5;
public static void main (String[] args) {
int[][] bingoBoard = new int[SIZE][SIZE];
// 배열 생성
for ( int i=0; i<SIZE; i++) {
bingoBoard[i][0] = i;
for (int j=0; j<SIZE; j++) {
bingoBoard[i][j] = (j+1) +(SIZE*i);
}
}
// 배열 뒤섞기
for ( int i=0; i<SIZE; i++) {
for ( int j=0; j<SIZE; j++) {
int RandomIndex = (int)(Math.random()*5);
int temp = 0;
temp = bingoBoard[i][j];
bingoBoard[i][j] = bingoBoard[RandomIndex][RandomIndex];
bingoBoard[RandomIndex][RandomIndex] = temp;
}
}
// 게임 시작
int chance = 15;
while (chance > 0) {
Scanner scanner = new Scanner(System.in);
System.out.println("번호를 입력해주세요. 남은 기회는"+ chance +"번, 종료는 00번입니다.");
int answer = scanner.nextInt();
Loop : for ( int i=0; i<SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (answer == bingoBoard[i][j]) {
bingoBoard[i][j] = 0;
break Loop; // 찾으면 바로 반복문 탈출
}
}
}
for (int i=0; i<SIZE; i++) {
for (int j=0; j<SIZE; j++) {
System.out.printf("%5d",bingoBoard[i][j]);
}
System.out.println();
}
chance -= 1;
}
}
}
코드만 쓸데없이 길게 작성했을 뿐 간단한 문제라서 더 얘기할 것이 없다.
만약 빙고판 뒤섞는 게 이해가 안된다면 (https://7357.tistory.com/64)
문제에서 제시된 내용은 아니지만 빙고 개수를 체크해서 점수를 출력하고 싶었는데 생각보다 어려워서 좌절했다.
지금은 최대한 빨리 배우는 게 중요해서 일단 넘어가지만 다음에 꼭.. ^^~~
2. 행렬 곱셈
우선 행렬 곱셈은 이렇게 생긴 친구다.
나처럼 의무 교육 과정을 이수한지 오래된 사람들은 뭔지 기억이 가물가물 할 수 있다.
보기만해도 거부감이 든다.
그림으로 표현하자면 아래와 같다.
만약 이렇게 생긴 두 개의 행렬을 곱한다면
첫번째 박스의 1행과 두번째 박스의 1열을 곱하고, 2열을 곱해서 각각 더한 뒤
첫번째 박스의 2행과 두번째 박스의 1열, 2열을 곱하고 각각 더한 뒤 다 더해주면 된다.
이렇게 생각하면 쉬운데 아래 코드를 보면 다시 어렵다.
public class Matrix {
public static void main(String[] args) {
int[][] matrix1 = {
{ 1, 2, 3},
{ 4, 5, 6},
};
int [][] matrix2 = {
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
};
int [][] matrix3 = new int[matrix1.length][matrix2[0].length];
for (int i=0; i<matrix1.length; i++) {
for (int j=0; j<matrix2[0].length; j++) {
for (int k=0; k< matrix1[0].length; k++) {
matrix3[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
System.out.println(Arrays.deepToString(matrix3));
}
}
똑똑하면 바로 이해가 될 수도 있지만 나는 이 문제가 어려웠다.
m3[0][0] =
m1[0][0]*m2[0][0]
+ m1[0][1]*m2[1][0]
+ m1[0][2]*m2[2][0]
m3[0][1] =
m1[0][0]*m2[0][1]
+ m1[0][1]*m2[1][1]
+ m1[0][2]*m2[2][1]
m3[1][0] =
m1[1][0]*m2[0][0]
+ m1[1][1]*m2[1][0]
+ m1[1][2]*m2[2][0]
m3[1][1] =
m1[1][0]*m2[0][1]
+ m1[1][1]*m2[1][1]
+ m1[1][2]*m2[2][1]
일단 이렇게 정리해놓고 봐야 한다.
그런데 이렇게 놓고 보니 누가봐도 2중 for문으로 각각 i, j 대입해주면 되는 아이들이 보인다.
m[i][j] = m[i][0] * m2[0][j]
+m[i][1] * m2[1][j]
+m[i][2] * m2[2][j]
이렇게 말이다.
근데 그럼 0 1 2는 어떻게 해결하지?
아주 간단하게도 안에 반복문 하나 더 만들면 된다.
양심적으로 말하자면 나는 여기서 진행이 막혀서 구글을 참고했다.
분발하자.
3. 단어 퀴즈 만들기
public class VocabularyTest {
public static void main(String[] args) {
String[][] words = {
{"apple", "사과"},
{"banana", "바나나"},
{"strawberry", "딸기"}
};
for(int i=0; i< words.length; i++) {
Scanner scanner = new Scanner(System.in);
System.out.printf("Q%d. %s의 뜻은 무엇인가요?%n", i+1, words[i][0]);
String input = scanner.nextLine();
if ( input.equals(words[i][1]) ) {
System.out.println("훌륭합니다!");
} else { System.out.println("더 공부하고 돌아오세요.");
break;}
if ( i == words.length-1 ) {
System.out.println("시험 통과!");
}
}
}
}
아주 간단한 문제라서 설명은 생략합니다.
'Language & Framework > Java' 카테고리의 다른 글
자바의 특성 단일상속, 그리고 단점 보완하기. (0) | 2022.06.04 |
---|---|
자바 멤버 변수의 초기화 순서 예제 (0) | 2022.06.03 |
자바 재귀 호출은 무엇인가? : factorial, 거듭제곱의 합 구하기 (0) | 2022.06.02 |
자바 배열 : 정렬하기(sort), 값 카운트하기 (0) | 2022.05.31 |
자바 배열 : 최소값 최대값 구하기, 합계 및 평균 구하기, 배열 뒤섞기, 로또 번호 만들기 (0) | 2022.05.30 |