[SWEA] - 1225 : 암호생성기 - Java

Chooooo·2024년 2월 3일
0

알고리즘/Java

목록 보기
12/16

문제

다음 주어진 조건에 따라 n개의 수를 처리하면 8자리의 암호를 생성할 수 있다.

  • 8개의 숫자를 입력 받는다.

  • 첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다.

다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.

이와 같은 작업을 한 사이클이라 한다.

  • 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.

[제약 사항]

주어지는 각 수는 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);
    }
}

코멘트

있는 그대로 구현하면 된다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글