반응형

@notepad_jj2

츄르사려고 코딩하는 코집사입니다.


1. [SW expert Academy] SWEA 1225번 암호생성기 자바(Java)

1) 난이도 : D3

 

2) 문제번호 : 1225번

 

3) 문제 출처

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD

 

SW Expert Academy

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

swexpertacademy.com

 

2. 문제

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

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

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

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

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

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

[1 사이클]

 

 

[암호 도출]

3. 제약사항

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

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

 

4. 입력

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

 

5. 출력

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

6. 풀이

- 큐를 구현하여 풀었다.

- 큐를 입력받고, 이 문제의 핵심은 큐를 poll해서 첫번째 때는 1, 두번째는 2 세번쨰는 3, ... 5까지 빼는 것이 1사이클

7. 소스 코드

import java.util.*;

public class Solution {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		for (int tc = 1; tc <= 10; tc++) {
			// 테스트케이스 입력
			int T = sc.nextInt();
			
			Queue<Integer> que = new LinkedList<>();

			//큐 입력
			for (int i = 0; i < 8; i++) {
				int v = sc.nextInt();
				que.add(v);				
			}


			int value = 1;
			while (value!=0) {
				for (int i = 1; i < 6; i++) {
					value = que.poll();
					value -= i;
					if (value <= 0) {
						value = 0;
					}
					que.offer(value);
					if(value==0) break;
				}
			}
			System.out.print("#" + tc + " ");
			for (int i = 0; i < 8; i++) {
				int a = que.poll();
				System.out.print(a + " ");
			}
			System.out.println();
		}
	}
}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기