본문 바로가기

Algorithm

[SWEA] JAVA - 1225 암호생성기

8개의 숫자를 앞에서부터 차례대로 1~5까지 감소시키고 맨앞의 원소를 감소시키면 감소된값을 다시 tail 로 붙이는 작업을 반복한다. 이러한 과정을 반복하기때문에 Queue를 사용해서 풀었다.

 

1~5까지 감소시키는 과정이 한 싸이클이다. 이렇게 계속 싸이클을 진행시키다가 0보다 같거나 작아지는 원소가 발생할때 이 원소를 0으로 유지한다음 종료시킨다.

package com.ssafy.off;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class SWEA_1225 {
	static int[] password;
	
	private static void solve(int[] password) {
		Queue<Integer> q = new LinkedList<>();
		
		for (Integer item : password) {
			q.add(item);
		}
		
		while(true) {
			//한사이클 1~5감소
			for (int i = 1; i <= 5; i++) {
				int head = q.poll();
				if(head-i <= 0) {
					q.add(0);
					for (Integer ele : q) {
						System.out.print(ele+" ");
					}
					return;
				}else {
					q.add(head-i);
				}
			}
		}
		
	}
	
	public static void main(String[] args) {
		//8개의 숫자를 1~5까지 감소시키는게 한 사이클
		//0보다작아질때 0으로 유지하고 종료 -> 이때 8자리 암호
		Scanner sc = new Scanner(System.in);
		for(int t = 0; t < 10; t++) {
			int tc = sc.nextInt();
			password = new int[8];
			for (int i = 0; i < 8; i++) {
				password[i] = sc.nextInt();
			}
			
			System.out.print("#" + tc+" ");
			solve(password);
			System.out.println();
			
		}
		
		
	}

}