1) SW Expert Academy 정책상 문제 자체를 퍼가는 것은 금지되며 링크와 출처로 명시해 주시기 바랍니다.
2) 문제에 대한 본인의 풀이에 대해서는 개인 학습 등 상업적 용도가 아닌 경우에만 문제 출처와 함께 게시가 가능합니다.
※ 저작권 이슈가 있을 시 법적 제재를 받을 수 있으니 참고하여주시기 바랍니다.
문제 설명
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 풀이(실패)
import java.util.Scanner;
class Solution{
public static void main(String args[]) throws Exception{
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); //테스트 케이스 입력
for(int test_case = 1; test_case <= T; test_case++){
//입력받기
int[] arr = new int[8];
for(int i=0; i<8; i++) {
arr[i] = sc.nextInt();
}
int i = 1;
while(arr[0] > 0) {
arr[0] = arr[0] - ((i - 1) % 5) + 1;
i++;
int tmp = arr[7];
arr[7] = arr[0];
arr[0] = arr[1];
arr[1] = arr[2];
arr[2] = arr[3];
arr[3] = arr[4];
arr[4] = arr[5];
arr[5] = arr[6];
arr[6] = tmp;
}
// 출력
System.out.print("#" + test_case + " ");
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
//올바른 로직은:
//앞에서 꺼낸 값을 줄이고, 나머지를 앞으로 당긴 후 줄인 값을 맨 뒤에 붙여야 함.
//
//나는 앞에서 꺼낸 값을 줄이고, 먼저 줄인 값을 맨 뒤에 붙이고 나머지를 앞으로 당겻음
입력을 처리하는 부분에서 오류가 있음
통과 코드
import java.util.Scanner;
class Solution {
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
// 테스트 케이스 10으로 고정해야 통과된다.
for (int test_case = 1; test_case <= 10; test_case++) {
sc.nextInt(); // 테스트케이스 번호 입력 (사용 안함)
// 사용안해도 위의 코드가 없으면 통과안됨
// 9550 9556 9550 9553 9558 9551 9551 9551
int[] arr = new int[8];
for (int i = 0; i < 8; i++) {
arr[i] = sc.nextInt();
}
int i = 1;
while (true) {
int tmp = arr[0] - ((i - 1) % 5) + 1;
i++;
// 앞으로 shift
arr[0] = arr[1];
arr[1] = arr[2];
arr[2] = arr[3];
arr[3] = arr[4];
arr[4] = arr[5];
arr[5] = arr[6];
arr[6] = arr[7];
// 마지막에 넣기
if (tmp <= 0) {
arr[7] = 0;
break;
} else {
arr[7] = tmp;
}
}
// 출력
// #1 6 2 2 9 4 1 3 0
System.out.print("#" + test_case + " ");
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
다른 풀이
import java.util.*;
class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int test_case = 1; test_case <= 10; test_case++) {
sc.nextInt(); // 테스트케이스 번호는 입력만 받고 사용하지 않음
Queue<Integer> queue = new LinkedList<>();
// Queue<Integer> queue = new ArrayDeque<>();
// 일반적인 Queue를 사용한다고하면 ArrayDeque가 더 빠름
for (int i = 0; i < 8; i++) {
queue.offer(sc.nextInt());
}
int cnt = 1;
while (true) {
int front = queue.poll(); // 맨 앞 제거
front -= cnt;
if (front <= 0) {
queue.offer(0);
break;
} else {
queue.offer(front);
}
cnt++;
if (cnt > 5) cnt = 1;
}
System.out.print("#" + test_case + " ");
for (int num : queue) {
System.out.print(num + " ");
}
System.out.println();
}
}
}