본문 바로가기 메뉴 바로가기

대표이미지

[배열] 카드 셔플

2023. 12. 5.

트럼프 카드 컷 (기리, 키리) , 셔플 (riffle) 배열 섞기

cut은 카드의 반을 잘라 섞지 않고 윗부분을 아래로 나머지 반을 그 위로.

riffle 은 반으로 나눈 카드를 B(윗부분), A(아랫부분)로 분리 A부터 B 순서로 번갈아가며

한장씩 맨 아래 카드부터 바닥에 쌓는다.

1,2,3,  4,5,6 일 때 

6,3 ,5,2 ,4,1 순서로 쌓으면

카드 배열은 1,4,2,5,3,6 으로 섞인다는 결과.


riffle, cut , riffle 순으로 섞으면

1. riffle - 1,4,2,5,3,6

2. cut   - 5,3,6,1,4,2

3. riffle - 5,1,3,4,6,2

public class CardShuffle {

	private static String[] numbers = {"1", "2", "3", "4", "5", "6"};
	private static String[] shuffles = {"riffle", "cut", "riffle"};
	
	public static void main(String[] args) {
		
		try {			
			String[] answer = new String[numbers.length];			
			for(String cond : shuffles){
				answer = getShuffle(cond, numbers);
			}

			for(int i = 0 ; i<answer.length ; i++){
				if(i>0) System.out.print(",");
				System.out.print(answer[i]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static String[] getShuffle(String cond, String[] array){
		String[] result = array;

		int half_length = array.length / 2;
		
		String[] part_a = new String[half_length];
		String[] part_b = new String[half_length];

		for(int i=0; i<half_length ; i++){
			part_a[i] = array[i+half_length];
			part_b[i] = array[i];
		}			
		
		if("cut".equals(cond)){
			for(int i=0; i<half_length; i++){
				result[i] = part_a[i];
				result[i+half_length] = part_b[i];
			}
		}else if("riffle".equals(cond)){
			int index = array.length - 1;			
			for(int i=half_length - 1; i >= 0; i-- ){
				result[index] = part_a[i];
				index--;
				result[index] = part_b[i];
				index--;
			}			
		}		
		return result;
	}
}

 

 

댓글 갯수
TOP