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();
}
}
'SWEA(SWExpertacAdemy)' 카테고리의 다른 글
[swea] 7532. 세영이의 SEM력 연도 D3 (자바) (0) | 2025.05.18 |
---|---|
[SWEA] 10200. 구독자 전쟁 D3 (자바) (1) | 2025.05.17 |
[SWEA] 208. [S/W 문제해결 기본] 1일차 - Flatten D3 (자바) (1) | 2025.05.17 |
[SWEA] 3142. 영준이와 신비한 뿔의 숲 D3 (자바) (0) | 2025.05.17 |
[SWEA] 11856. 반반 D3 (자바) (0) | 2025.05.17 |