[SWEA 1225] [S/W 문제해결 기본] 7일차 - 암호생성기
업데이트:
문제
- SWEA 1225
- 문제의 저작권은 SW Expert Academy에 있습니다.
접근방식
이 문제는 큐를 사용하여 푸는 문제이다.
입력받은 숫자를 모두 큐에 넣는다. 여기서 첫번째 숫자부터 다섯번째 숫자 각각을 1에서 5까지 감소킨 후 맨 뒤에 넣어주어야 하므로 1부터 5까지의 인덱스가 될 변수 num = 1로 초기화시킨다. 그리고 각 원소가 0이 될때 까지 while문을 돌리면서 큐에서 원소를 하나 꺼내 num만큼 빼준 후 다시 큐에 넣어주고 num을 1증가 시킨다. 만약 num이 6이되면 1로 변경해 다시 1부터 5까지 증가할 수 있도록 한다. 이때 num을 뺀 값이 0이하이면 바로 반복문을 종료하고 이때 큐에 저장된 원소를 모두 꺼내서 출력하면 된다.
코드
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Swea_1225 {
static int T;
static Queue<Integer> queue;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
queue = new LinkedList<>();
for(int tc=0; tc<10; tc++) {
T = sc.nextInt();
for(int i=0; i<8; i++) {
queue.offer(sc.nextInt());
}
//감소한 숫자가 0이 될때까지 5사이클씩 돌려주기(각 사이클당 i=1~5만큼 빼줌)
int num = 1;
int newInput = 0;
while(true) {
if(num >= 6) {
num = 1;
}
int output = queue.poll(); //뽑아서 num을 뺀값이 0이하인지 검사
//0이하이면 0 넣고 종료
if(output-num <= 0) {
queue.offer(0);
break;
}else {
output -= num;
queue.offer(output);
}
num++;
}
System.out.print("#"+T+" ");
for(int i=0; i<8; i++) {
System.out.print(queue.poll()+" ");
}
System.out.println();
}
}
}