[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();
		}
		
	}
}

태그:

카테고리:

업데이트: