다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
8개의 숫자를 입력 받는다.
첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.
[제약 사항]
주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
public class SWEA_1225_암호생성기 {
/**
* ! 8자리 암호 생성 , 8개 숫자 입력 받음.
* * 덱을 이용해서 해결
*/
static int t, T = 10;
static int[] data;
static Deque<Integer> dq;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
for (int tc = 1; tc <= T; tc++) {
t = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
dq = new ArrayDeque<>();
for (int i = 0; i < 8; i++) {
dq.offer(Integer.parseInt(st.nextToken()));
}
outer :
while (true) {
for (int i = 1; i <= 5; i++) {
int num = dq.poll();
if (num - i <= 0) {
dq.offer(0);
break outer;
} else {
dq.offer(num - i);
}
}
}
sb.append("#").append(tc).append(" ");
for (int i = 0; i < 8; i++) {
sb.append(dq.poll()).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
}
}
있는 그대로 구현하면 된다.