[SWEA] 3488 퍼펙트 셔플

SWEA.3488 퍼펙트 셔플

이번 문제는 생각보다 쉬웠다. 문제를 먼저 읽고나서 저녁 밥을 먹으면서 어떻게 풀지 생각을 해봤다.
처음 떠오른 아이디어는 문자열을 N/2 사이즈 배열 두개에 앞 절반과 뒤 절반을 집어넣고, 배열 1과 2를 돌아가면서 출력하는 것이었다.

일단 처음 떠오른 아이디어를 가지고 구현했다. 그런데 구현하다 보니 굳이 배열을 만들 필요가 없어서 생성한 배열을 지우고, 바로 스트링빌더에 값을 추가해줬다.

생각보다 쉬워서 바로 제출했는데, 에러가 나길래 확인을 해보니, 홀수인 경우에 인덱스 범위를 벗어나지 않도록 처리해 줬어야 했고, 배열의 절반위치를 계산하는 식에서 -1을 더 빼줬어서, 값을 다시 계산해서 넣어주었다.

package _0205;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class SW3499shuffle {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int TC = Integer.parseInt(br.readLine());
		StringBuilder sb= new StringBuilder();
		for (int testCase = 1; testCase <= TC; testCase++) {
			sb.append("#").append(testCase).append(" ");
			int N = Integer.parseInt(br.readLine());
			String[] s = br.readLine().split(" ");
			for (int i = 0, index=0; index < N; i++) {
				sb.append(s[i]).append(" ");
				index++;
				if(index>=N) break;
				sb.append(s[i+(int)Math.round(N/2.0)]).append(" ");
				index++;
			}
			sb.append("\n");
		}
		System.out.print(sb);
	}
}