반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-19 04:57
관리 메뉴

ImJay

[SWEA/Java] 1225. 암호생성기 본문

SW Expert Academy/D3

[SWEA/Java] 1225. 암호생성기

ImJay 2024. 2. 4. 17:13
반응형

[SWEA/Java] 1225. 암호생성기

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

package edu.ssafy.im.SWEA.D3.No1225;

import java.io.*;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class Solution {
    int n = 8; // 입력으로 주어지는 숫자의 개수

    // 큐를 사용하여 데이터를 저장할 변수 선언
    Queue<Integer> queue;

    public static void main(String[] args) throws IOException {
        new Solution().io();
    }

    private void io() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        for (int t = 1; t <= 10; t++) { // 테스트케이스 반복
            br.readLine(); // 테스트케이스 번호는 사용하지 않으므로 건너뜀
            StringTokenizer st = new StringTokenizer(br.readLine());
            queue = new ArrayDeque<>(); // 큐 초기화

            // 입력으로 주어진 숫자들을 큐에 저장
            for (int i = 0; i < n; i++) {
                queue.offer(Integer.parseInt(st.nextToken()));
            }

            // 암호를 도출하는 메서드 호출
            String ans = sol();

            // 결과 문자열 생성
            sb.append("#").append(t).append(" ").append(ans).append("\n");
        }

        // 결과 출력
        bw.write(sb.toString());
        bw.flush();
        bw.close();
    }

    private String sol() {
        StringBuilder sb = new StringBuilder();

        int cycle = 1; // 사이클 카운터 초기화
        L: // 레이블을 사용하여 루프 제어
        while (true) {
            int q = queue.poll() - cycle; // 큐에서 숫자를 꺼내어 사이클 값을 뺀다
            if (q <= 0) { // 숫자가 0 이하로 감소할 경우
                queue.offer(0); // 큐에 0을 추가하고
                break L; // 레이블로 표시된 루프 종료
            } else {
                queue.offer(q); // 큐에 감소한 숫자를 추가
            }

            cycle %= 5; // 사이클을 5로 나눈 나머지를 계산하여 사이클 카운터 갱신
            cycle++; // 사이클 카운터 증가
        }

        // 암호를 구성하는 숫자들을 문자열로 변환하여 반환
        for (int q : queue) {
            sb.append(q).append(" ");
        }

        return sb.toString(); // 암호 문자열 반환
    }
}
반응형
Comments