문제
다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.
- 8개의 숫자를 입력 받는다.
- 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.
다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.
이와 같은 작업을 한 사이클이라 한다.
- 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.
[1 사이클]
[암호 도출]
제약 사항
주어지는 각 수는 integer 범위를 넘지 않는다.
마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
입력
각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
출력
#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
풀이
자바의 Queue 내장함수를 이용해 문제를 풀이하였다.
for 루프를 돌며 큐에서 값을 poll한 후,
i만큼 빼고 다시 offer 해주는 방식을 반복하면 문제를 간단히 해결할 수 있을 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class 암호생성기 {
public static void PWGen(Queue<Integer> q) {
int value = 0;
do {
for (int i = 1; i <= 5; i++) {
value = q.poll();
value -= i;
if (value < 0) value = 0;
q.offer(value);
if (value == 0) break;
}
} while (value != 0);
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (int test_case = 0; test_case < 10; test_case++) {
int tc = Integer.parseInt(br.readLine());
Queue<Integer> q = new LinkedList<>();
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < 8; i++)
q.add(Integer.parseInt(st.nextToken()));
System.out.print("#" + tc + " ");
PWGen(q);
for (int i = 0; i < 8; i++)
System.out.print(q.poll() + " ");
System.out.println();
}
}
}
'코딩테스트 > SWEA' 카테고리의 다른 글
[JAVA] SWEA 1238번 Contact (0) | 2021.08.02 |
---|---|
[JAVA] SWEA 1226번 미로1 (0) | 2021.08.02 |
[JAVA] SWEA 1267번 작업순서 (0) | 2021.08.02 |
[JAVA] SWEA 1234번 비밀번호 (0) | 2021.08.02 |
[JAVA] SWEA 1224번 계산기3 (0) | 2021.08.02 |
댓글