본문 바로가기

코딩테스트

[JAVA-D3] SWEA 3499 - 퍼펙트 셔플

728x90
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

✅ 문제 요약

문자열이 주어졌을 때 문자열을 절반씩 나누어 나뉜 두 문자열을 순차적으로 하나씩 섞은 뒤 결과를 출력하라

 

🤔 문제 풀이

일단 주어지는 문자열의 개수가 짝수이냐 홀수이냐로 나누었다.

짝수라면 반반 나누면 되지만 홀수인 경우 첫번째 배열에 1가지가 더 저장되어야되기 때문

두 배열에 각각 저장한 뒤엔 두 배열에서 번갈아가며 answer배열에 저장하고 출력하면 된다.

 

🚨CODE

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

public class Solution {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int testCase = Integer.parseInt(br.readLine());

		for (int t = 1; t <= testCase; t++) {
			int n = Integer.parseInt(br.readLine());
			String[] a = new String[n/2+1];
			String[] b = new String[n/2];
			String[] answer = new String[n];
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			
			if(n % 2 == 0) {
				for(int i = 0; i<n/2; i++) {
					a[i] = st.nextToken();
				}
				for(int i = 0; i<n - n/2; i++) {
					b[i] = st.nextToken();
				}
			}else {
				for(int i = 0; i<n/2+1; i++) {
					a[i] = st.nextToken();
				}
				for(int i = 0; i<n - (n/2+1); i++) {
					b[i] = st.nextToken();
				}
			}
			
			int aidx = 0; int bidx = 0;
			for(int i = 1; i<=n; i++) {
				if(i % 2 == 1) {
					answer[i-1] = a[aidx++];
				}else {
					answer[i-1] = b[bidx++];
				}
			}
			
			StringBuilder sb = new StringBuilder();
			for(String e : answer) {
				sb.append(e).append(" ");
			}
			
			bw.write(String.format("#%d %s\n", t, sb.toString()));
		}
		
		bw.flush();
	}	
}
728x90
반응형