다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
8개의 숫자를 입력 받는다.
첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.


[제약 사항]
주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
[입력]
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
[출력]
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
count를 증가시키며 가장 앞의 값에서 count만큼 감소하고 삭제한 뒤, 가장 뒤에 추가한다. 그리고 count가 5가 되면 다시 1로 설정한 뒤 반복하며 count만큼 뺀 수가 0 이하일때, 0을 넣은 뒤 반복을 중지한다.import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
/**
* @author 김유나
* [문제] SWEA 1225번 암호생성기
* - 8개의 숫자를 입력 받아 첫번째 숫자를 1 감소한 뒤 맨뒤로 보내고, 두번째 숫자를 2 감소한뒤 맨뒤로 보낸다. 다섯번째 숫자까지 반복한 뒤 다시 1을 감소시키는 사이클로 돌아간다.
* - 이때, 감소한 값이 0 이하일때, 0으로 하여 맨뒤로 보낸 숫자열이 최종 암호다.
* [아이디어]
* - 가장 앞의 값을 뒤로 보내는 과정을 반복하므로 Queue를 사용한다.
* - 감소할 수인 count를 증가시키며 가장 앞의 값에서 count만큼 감소하고 삭제한 뒤, 가장 뒤에 추가한다.
* - count가 5가 되면 다시 1로 설정한 뒤 반복하며 count만큼 뺀 수가 0 이하일때, 0을 넣은 뒤 반복을 중지한다.
*
* 메모리 : 24,316kb 실행 시간 : 120ms
*/
public class D3_1225_암호생성기_김유나 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int T = 1; T <= 10; T++) {
int tc = Integer.parseInt(br.readLine()); // 테스트 케이스
Queue<Integer> q = new LinkedList<>(); // 8개의 숫자를 넣을 Queue
StringTokenizer st = new StringTokenizer(br.readLine()); // 입력받은 숫자 한 줄
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 8; i++) {
q.offer(Integer.parseInt(st.nextToken())); // Queue에 숫자 8개 입력
}
int count = 1; // 감소할 값 count
while (true) {
int first = q.poll() - count++;
// poll() : 가장 앞의 값 반환한 뒤 삭제
// count만큼 감소 후 ++
if (first <= 0) { // 감소한 값이 0 이하일 경우
q.offer(0); // 0을 넣은 뒤
break; // break
}
if (count == 6) count = 1; // count가 6이 되면 1로 다시 초기화 : 새 사이클 시작
q.offer(first); // 감소된 값 넣기
}
sb.append("#").append(T).append(" ");
for (int i = 0; i < 8; i++) {
sb.append(q.poll()).append(" ");
}
System.out.println(sb);
}
}
}