반응형
츄르사려고 코딩하는 코집사입니다.
1. [SW expert Academy] SWEA 3499번 퍼펙트 셔플 자바(Java)
1) 난이도 : D3
2) 문제번호 : 3499번
3) 문제 출처
swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWGsRbk6AQIDFAVW
2. 문제
카드를 퍼펙트 셔플 한다는 것은, 카드 덱을 정확히 절반으로 나누고 나눈 것들에서 교대로 카드를 뽑아 새로운 덱을 만드는 것을 의미한다.
정확한 방식은 다음 그림과 같다.
N개의 카드가 있는 덱이 주어질 때 이를 퍼펙트 셔플하면 어떤 순서가 되는지 출력하는 프로그램을 작성하라.
만약 N이 홀수이면, 교대로 놓을 때 먼저 놓는 쪽에 한 장이 더 들어가게 하면 된다.
3. 제약사항
-
4. 입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 자연수 N(1 ≤ N ≤ 1,000)이 주어진다.
두 번째 줄에는 덱에 카드가 놓인 순서대로 N개의 카드 이름이 공백으로 구분되어 주어진다.
카드의 이름은 알파벳 대문자와 ‘-’만으로 이루어져 있으며, 길이는 80이하이다.
5. 출력
각 테스트 케이스마다 주어진 덱을 퍼펙트 셔플한 결과를 한 줄에 카드 이름을 공백으로 구분하여 출력한다.
6. 풀이
- boolean을 사용하여 서로 번갈아가면서 대입
- 재귀호출 방법으로 풀 수 있을거 같은데 생각이 떠오르진 않는다.
7. 소스 코드
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 1; tc <= T; tc++) {
int N = sc.nextInt();
String[] arr = new String[N];
String[] result = new String[N];
int first = 0;
int mid = 0;
if(N%2==0) {
mid = N/2;
}
else {
mid = N/2+1;
}
boolean sign = true;
for(int i=0;i<N;i++) {
arr[i] = sc.next();
}
for(int i=0;i<N;i++) {
if(sign) {
result[i] = arr[first];
first++;
sign = false;
}
else {
result[i] = arr[mid];
mid++;
sign = true;
}
}
System.out.printf("#%d ", tc);
for(int i=0;i<N;i++) {
System.out.print(result[i] + " ");
}
System.out.println();
}
}
}
반응형
'알고리즘 > SW expert Academy' 카테고리의 다른 글
[SW expert Academy] SWEA 1989번 초심자의 회문 검사 자바(Java) (0) | 2021.02.05 |
---|---|
[SW expert Academy] SWEA 1948번 날짜 계산기 자바(Java) (0) | 2021.02.05 |
[SW expert Academy] SWEA 2007번 패턴 마디의 길이 자바(Java) (2) | 2021.02.05 |
[SW expert Academy] SWEA 1288번 새로운 불면증 치료법 자바(Java) (0) | 2021.02.05 |
[SW expert Academy] SWEA 1225번 암호생성기 자바(Java) (0) | 2021.02.04 |
[SW expert Academy] SWEA 5432번 쇠막대기 자르기 자바(Java) (0) | 2021.02.04 |
[SW expert Academy] SWEA 1218번 괄호 짝짓기 자바(Java) (0) | 2021.02.04 |
[SW expert Academy] SWEA 5431번 민석이의 과제 체크하기 자바(Java) (0) | 2021.02.03 |
최근댓글