SWEA(SWExpertacAdemy)

[SWEA] 3499. 퍼펙트 셔플 D3 (자바)

심층코드 2025. 5. 17. 21:29

3499. 퍼펙트 셔플 D3


[문제]

 


카드를 퍼펙트 셔플 한다는 것은, 카드 덱을 정확히 절반으로 나누고 나눈 것들에서 교대로 카드를 뽑아 새로운 덱을 만드는 것을 의미한다. 

정확한 방식은 다음 그림과 같다.


N개의 카드가 있는 덱이 주어질 때 이를 퍼펙트 셔플하면 어떤 순서가 되는지 출력하는 프로그램을 작성하라.

만약 N이 홀수이면, 교대로 놓을 때 먼저 놓는 쪽에 한 장이 더 들어가게 하면 된다.


[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 자연수 N(1 ≤ N ≤ 1,000)이 주어진다.

두 번째 줄에는 덱에 카드가 놓인 순서대로 N개의 카드 이름이 공백으로 구분되어 주어진다.

카드의 이름은 알파벳 대문자와 ‘-’만으로 이루어져 있으며, 길이는 80이하이다.

[출력]

각 테스트 케이스마다 주어진 덱을 퍼펙트 셔플한 결과를 한 줄에 카드 이름을 공백으로 구분하여 출력한다.


 

입력
3
6
A B C D E F
4
JACK QUEEN KING ACE
5
ALAKIR ALEXSTRASZA DR-BOOM LORD-JARAXXUS AVIANA





 
 
출력
#1 A D B E C F
#2 JACK KING QUEEN ACE
#3 ALAKIR LORD-JARAXXUS ALEXSTRASZA AVIANA DR-BOOM


 



 

[코드]

import java.io.*;
import java.util.*;

public class Solution{

	public static void main(String[] args) throws IOException{
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		int N=Integer.parseInt(br.readLine());
		for (int i = 1; i <= N; i++) {
			int A=Integer.parseInt(br.readLine());

			String arr1[] =new String[A];
			String arr2[] =new String[A];

			
			int ceil=A/2;
			if(A%2!=0) {
				ceil++;
			}
			StringTokenizer st = new StringTokenizer(br.readLine());

			for (int i2 = 0; i2 < ceil; i2++) {
				String B=st.nextToken();
				arr1[i2]=B;
			}
			
			for (int i3 = 0; i3 < A-ceil; i3++) {
				String B=st.nextToken();
				arr2[i3]=B;
			}
		
			List<String> arr3=new ArrayList<>();
			
			for (int j = 0; j < ceil; ) {
				arr3.add(arr1[j]);
				arr3.add(arr2[j]);
				j++;
			}
			if(A%2!=0) {
				arr3.add(arr1[ceil]);
			}
			System.out.print("#"+i+" ");
			for (int j2 = 0; j2 < A; j2++) {
				System.out.print(arr3.get(j2)+" ");
			}
			System.out.println();			
		}
		br.close();
	}
}