본문 바로가기
코딩테스트/SWEA

[JAVA] SWEA 1225번 암호생성기

by PEKAH 2021. 8. 2.

문제

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


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


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


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


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


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

[1 사이클]
 

 

[암호 도출]

제약 사항

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


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

입력

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

출력

#부호와 함께 테스트케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.

풀이

자바의 Queue  내장함수를 이용해 문제를 풀이하였다.

 

for 루프를 돌며 큐에서 값을 poll한 후,

 

i만큼 빼고 다시 offer 해주는 방식을 반복하면 문제를 간단히 해결할 수 있을 것이다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class 암호생성기 {
	public static void PWGen(Queue<Integer> q) {
		int value = 0;
		do {
			for (int i = 1; i <= 5; i++) {
				value = q.poll();
				value -= i;
				if (value < 0) value = 0;
				q.offer(value);
				if (value == 0) break;
			}
		} while (value != 0);
	}
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for (int test_case = 0; test_case < 10; test_case++) {
			int tc = Integer.parseInt(br.readLine());
			
			Queue<Integer> q = new LinkedList<>();
			
			StringTokenizer st = new StringTokenizer(br.readLine());
			for (int i = 0; i < 8; i++) 
				q.add(Integer.parseInt(st.nextToken()));
			
			System.out.print("#" + tc + " ");
			PWGen(q);
			
			for (int i = 0; i < 8; i++) 
				System.out.print(q.poll() + " ");
			
			System.out.println();
		}
	}
}

 

 

 

'코딩테스트 > SWEA' 카테고리의 다른 글

[JAVA] SWEA 1238번 Contact  (0) 2021.08.02
[JAVA] SWEA 1226번 미로1  (0) 2021.08.02
[JAVA] SWEA 1267번 작업순서  (0) 2021.08.02
[JAVA] SWEA 1234번 비밀번호  (0) 2021.08.02
[JAVA] SWEA 1224번 계산기3  (0) 2021.08.02

댓글