개발 공부 기록

[SWEA 3499번 /JAVA] 퍼펙트 셔플 본문

PS/Implement

[SWEA 3499번 /JAVA] 퍼펙트 셔플

나만없서고냥이 2023. 11. 4. 03:06

Question

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW

 

SW Expert Academy

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

swexpertacademy.com

 


💡 Solution

이번 문제는 단순 구현 문제로, 실제 코딩 테스트를 보고 있는 상황이라 가정하여 시간이 얼마 안 남았을 경우 내가 생각한대로 막 구현해보자! 라는 마음으로 풀어봤습니다. 따라서 풀이가 깨끗하지 않을 수도 있습니다😂 제가 인덱스를 가지고 노는 것에 약한데, 연습이 더욱 된다면 코드가 더 간결해질 수 있을 거 같습니다.

 

💻 Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class SWEA3499 {
	static List<String> deck = new ArrayList<>();
	static List<String> result = new ArrayList<>();
	
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		
		StringTokenizer st;
		for(int tc = 1; tc <= T; tc++) {
			int N = Integer.parseInt(br.readLine());
			st = new StringTokenizer(br.readLine(), " ");
			deck.clear();
			result.clear();
			for(int i = 0; i < N; i++) {
				deck.add(st.nextToken());
			}
			
			System.out.printf("#%d ", tc);
			result = solve(N);
			for (String card : result) {
				System.out.print(card + " ");
			}
			System.out.println();
		}

	}
	
	public static List<String> solve(int n) {
		List<String> left = new ArrayList<>();
		List<String> right = new ArrayList<>();
		
		if(n % 2 != 0) {
			n++;
		}
		
		for (int i = 0; i < n / 2; i++) {
			left.add(deck.get(i));
		}
		
		for (int i = n / 2; i < deck.size(); i++) {
			right.add(deck.get(i));
		}
		
		int size = Math.min(left.size(), right.size());
		
		for (int i = 0; i < size; i++) {
			result.add(left.get(i));
			result.add(right.get(i));
		}
		
		if(left.size() > right.size()) {
			result.add(left.get(left.size() - 1));
		}
	
		return result;
	}

}