본문 바로가기

알고리즘 문제풀이/SWEA(SW Expert Academy)

[SWEA][JAVA] 1225 - 암호 생성기

문제 출처: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE&problemTitle=1225&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

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

swexpertacademy.com

 

 

 

문제

 

 

설명

문제를 보자마자 선입선출 자료구조인 Queue를 사용하는 전형적인 문제라는 생각이 들었습니다.

큐를 사용해서 로직대로 차근차근 front를 back으로 넣어주다가, front에서 수를 뺐을 때 0 이하인 경우 마지막으로 enqueue 후 끝내는 플로우로 코드를 작성하면 됩니다.

 

 

 

코드

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

public class SWEA1225_Code {

	public static void main(String[] args) {
		
		Queue<Integer> q = new LinkedList<>();
		Scanner sc = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		
		for(int tc=1; tc<=10; tc++) {
			int T = sc.nextInt();
			for(int i=0; i<8; i++) {
				q.offer(sc.nextInt());
			}
			//입력 완료
			boolean flag = false; //찾았으면 true, 못 찾았으면 false;
			
			while(!flag) {
				
				for(int n=1; n<=5; n++) { //한 사이클
					if(q.peek()-n>0) {
						int tmp = q.poll() - n;
						q.offer(tmp);
					}
					else { //암호 생성 가능이면
						flag=true;
						q.poll();
						q.offer(0);
						break; //while문 앞에 label 붙여서, 밑의 break문 없이 한 번에 이중 반복문 탈출도 가능함.
					}
				 }
				if(flag)
					break;
		   }
			sb.append("#"+tc);
			
			while(!q.isEmpty()) {
				sb.append(" "+q.poll());
				}
			sb.append("\n");
		}
		System.out.println(sb);
	}
}