본문 바로가기

Java/Java 알고리즘 SWEA

[SW 아카데미] 1225. [S/W 문제해결 기본] 7일차 - 암호생성기

반응형

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

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

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

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

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

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

 

[1 사이클]

 
 
[암호 도출]
 
[제약 사항]

주어지는 각 수는 integer 범위를 넘지 않는다.

마지막 암호 배열은 모두 한 자리 수로 구성되어 있다.
 
[입력]

각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고, 그 다음 줄에는 8개의 데이터가 주어진다.
 
[출력]

#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
입력1
9550 9556 9550 9553 9558 9551 9551 9551
2
2419 2418 2423 2415 2422 2419 2420 2415
........
 
 
출력
#1 6 2 2 9 4 1 3 0
#2 9 7 9 5 4 3 8 0
.......


import java.util.Scanner;

public class Solution {
	public int[] solution(int[] arr) {
		// 0보다 작을 경우 종료
		// 1부터 5까지 빼면 한 사이클 -> arr[0]-i가 0이될때까지 반복

		int i = 1;
		while (arr[0] - i > 0) {
			int tmp=arr[0];
			for (int j = 1; j < arr.length; j++) {
				arr[j - 1] = arr[j];
			}
			arr[arr.length-1]=tmp-i;

			i++;
			if (i == 6)
				i = 1;
		}
		for (int j = 1; j < arr.length; j++) {
			arr[j - 1] = arr[j];
		}
		arr[arr.length - 1] = 0;


		return arr;

	}

	public static void main(String[] args) {
		Solution T = new Solution();
		Scanner kb = new Scanner(System.in);
		for (int i = 1; i <= 10; i++) {
			int m = kb.nextInt();
			int[] arr = new int[8];
			for (int j = 0; j < 8; j++) {
				arr[j] = kb.nextInt();
			}
			System.out.print("#" + i + " ");
			for (int x : T.solution(arr)) {
				System.out.print(x + " ");
			}
			System.out.println();
		}

	}

}
반응형