문제
16장의 카드에서 같은 색을 가진 카드 짝을 찾는 문제입니다 이를 해결하는 프로그램을 작성하세요
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 11
두 번째 카드를 선택하세요: 24
12 13 14
21 22 23
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 13
두 번째 카드를 선택하세요: 12
14
21 22 23
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 54
두 번째 카드를 선택하세요: 36
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 13
두 번째 카드를 선택하세요: 31
11 12 14
21 22 23 24
32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 11
두 번째 카드를 선택하세요: 24
12 14
21 22 23
32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 41
두 번째 카드를 선택하세요: 34
12 14
21 22 23
32 33
42 43 44
첫 번째 카드를 선택하세요: 64
두 번째 카드를 선택하세요: 17
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 11
두 번째 카드를 선택하세요: 12
13 14
21 22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 11
두 번째 카드를 선택하세요: 13
12 14
21 22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 21
두 번째 카드를 선택하세요: 11
12 13 14
22 23 24
31 32 33 34
41 42 43 44
첫 번째 카드를 선택하세요: 10
두 번째 카드를 선택하세요: 03
알고리즘 설계
프로그램 시작
먼저 같은 색 카드 두 장을 맞추면 번호 대신 색깔을 출력하도록 설정
카드 게임 현황 출력
사용자가 선택한 카드이거나 이미 짝을 맞춘 카드는 색깔 출력
아니면 11 - 44의 카드번호를 출력
카드 두 장을 새로 선택
새로 선택한 카드가 11 - 44 사이면 게임 계속 진행
프로그램 종료
// 파일명 : ./Chapter10/CardMatching.java
import java.util.Scanner;
public class CardMatching
{
// 프로그램 시작
1 public static void main( String[] args ) {
Scanner scan = new Scanner( System.in );
int[][] output = { { 11, 12, 13, 14 },
{ 21, 22, 23, 24 },
{ 31, 32, 33, 34 },
{ 41, 42, 43, 44 } };
int[][] color = { { 0, 1, 2, 7 },
{ 3, 5, 6, 0 },
{ 2, 4, 6, 3 },
{ 4, 5, 1, 7 } };
2 int card1 = -1, card2 = -1, card1Row = -1, card1Column = -1, card2Row = -1, card2Column = -1;
3 do {
// 먼저 같은 색 카드 두 장을 맞추면 번호 대신 색깔을 출력하도록 설정
4 if( ( card1 != card2 ) && ( color[card1Row ][card1Column]== color[card2Row ][card2Column]) ) {
output[card1Row ][card1Column]= color[card1Row ][card1Column];
5 output[card2Row ][card2Column]= color[card2Row ][card2Column];
}
// 카드 게임 현황 출력
6 for( int row = 0; row < output.length; row++ ) {
for( int subRow = 0; subRow < 3; subRow++ ) {
for( int column = 0; column < output[0].length; column ++ ) {
// 사용자가 선택한 카드이거나 이미 짝을 맞춘 카드는 색깔 출력
if( ( output[row ][column]<= 7 ) || ( output[row ][column]== card1 ) || ( output[row ][column]== card2 ) )
7 System.out.print( " \033[4" + color[row ][column]+ "m \033[0m" );
// 아니면 11 - 44의 카드번호를 출력
else if ( subRow == 1 )
8 System.out.print(" " + output[row ][column]+ " ");
else
System.out.print(" ");
}
9 System.out.println();
}
}
// 카드 두 장을 새로 선택
System.out.print( "첫 번째 카드를 선택하세요: " );
card1 = scan.nextInt();
card1Row = card1 / 10 - 1;
10 card1Column = card1 % 10 - 1;
System.out.print( "두 번째 카드를 선택하세요: " );
card2 = scan.nextInt();
card2Row = card2 / 10 - 1;
11 card2Column = card2 % 10 - 1;
// 새로 선택한 카드가 11 - 44 사이면 게임 계속 진행
12 } while( ( 0 <= card1Row ) && ( card1Row < 4 ) && ( 0 <= card1Column ) && ( card1Column < 4 )
&& ( 0 <= card2Row ) && ( card2Row < 4 ) && ( 0 <= card2Column ) && ( card2Column < 4 ) );
scan.close();
// 프로그램 종료
13 }
}
실행 순서 확인