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(); // 암호 문자열 반환
}
}반응형