hye-log

[SWEA]1225번 암호생성기(JAVA) 본문

CodingTest/SWEA

[SWEA]1225번 암호생성기(JAVA)

iihye_ 2023. 8. 7. 20:10

0. 문제 링크

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

 

SW Expert Academy

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

swexpertacademy.com

 

1. 문제 설명

1) 8개의 숫자를 입력 받음

2) 첫 번째 숫자를 1 감소하고 맨 뒤로 보내고, 두 번째 숫자를 2 감소하고 맨 뒤로 보내고, ... 이 과정을 반복

3) 감소한 숫자가 0이 되면 프로그램이 종료되고, 이 때의 8자리 숫자 값이 암호가 됨

4) 암호 출력

 

2. 입출력

// input
1
9550 9556 9550 9553 9558 9551 9551 9551
2
2419 2418 2423 2415 2422 2419 2420 2415
........

// output
#1 6 2 2 9 4 1 3 0
#2 9 7 9 5 4 3 8 0
.......

 

3. 코드

import java.util.*;

public class swea1225 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = 10; // 테스트 케이스의 개수
		for(int t = 1; t <= T; t++) {
			int tc = sc.nextInt();
			Queue<Integer> q = new ArrayDeque<Integer>(); // 큐 생성
			for(int i = 0; i < 8; i++) { // 처음에는 스택에 저장
				q.offer(sc.nextInt());
			}
			
			int k = 1;
			boolean flag = false;
			while(true) {
				if(flag == true) {
					break;
				}
				
				int temp = q.peek(); // 제일 위에 있는 수
				q.poll(); // 하나 꺼내기
				if(temp - k > 0) { // temp - k가 0보다 크면 그대로 빼기
					temp -= k;
				} else { // temp - k 가 0이거나 0보다 작으면 0으로
					temp = 0;
					flag = true;
				}
				q.offer(temp); // k만큼 빼서 넣기
				k++; // k 증가
				if(k > 5) { // k가 5보다 크면 한 사이클 종료이므로 1 감소부터 시작
					k -= 5;
				}
			}
			
			// 출력
			System.out.printf("#%d ", t);
			while(!q.isEmpty()) { // 비어있을 때까지
				System.out.print(q.poll() + " ");
			}
			System.out.println();
		}
	}

}

 

실행 결과

 

4. 회고

1) FIFO 구조가 필요하므로 queue 사용

2) 감소한 수가 0일 때까지 반복하는 while 문으로 구

 

5. Github

https://github.com/iihye/Algorithm/blob/main/SWEA/swea1225.java

 

728x90
Comments