👀 문제 설명
로그인해야 문제를 볼 수 있다.
✍🏻풀이
덱을 두 개 사용해서 카드를 절반씩 나눠 넣고, 덱에서 번갈아 가면서 카드를 빼면 된다.
카드가 홀수이면, 교대로 놓을 때 먼저 놓는 쪽에 한 장이 더 들어가야 하므로 카드가 홀수일 때, 짝수일 때로 나눈다.
카드가 홀수일 때는, 0부터 N / 2 까지 dequeA에 넣고, 이후에는 dequeB에 넣는다.
카드가 짝수일 때는, 0부터 N / 2 - 1 까지 dequeA에 넣고, 이후에는 dequeB에 넣는다.
코드
package swea;
// 퍼펙트 셔플 (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW&categoryId=AWGsRbk6AQIDFAVW&categoryType=CODE&problemTitle=%ED%8D%BC%ED%8E%99%ED%8A%B8+&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 )
import java.util.*;
import java.io.*;
public class SWEA_3499 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int T, N;
Deque<String> dequeA = new LinkedList<>();
Deque<String> dequeB = new LinkedList<>();
T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
if (N % 2 == 0) {
if (i < N /2)
dequeA.add(st.nextToken());
else
dequeB.add(st.nextToken());
}
else {
if (i <= N /2)
dequeA.add(st.nextToken());
else
dequeB.add(st.nextToken());
}
}
bw.write("#" + tc + " ");
while (true) {
if (dequeA.isEmpty() && dequeB.isEmpty())
break;
if (!dequeA.isEmpty())
bw.write(dequeA.poll() + " ");
if (!dequeB.isEmpty())
bw.write(dequeB.poll() + " ");
}
bw.newLine();
}
bw.flush();
bw.close();
}
}
'숨막히는 알고말고 > 문제 풀이' 카테고리의 다른 글
[Baekjoon] 체스판 다시 칠하기 (0) | 2021.08.08 |
---|---|
[SWEA] 정사각형 방 (0) | 2021.08.06 |
[SWEA] 쇠막대기 자르기 (0) | 2021.08.05 |
[Baekjoon] 탑 (2) | 2021.08.05 |
[SWEA] 암호생성기 (0) | 2021.08.05 |