뚱땅뚱땅

[문제] SWEA 1225번 암호생성기 본문

알고리즘/swea

[문제] SWEA 1225번 암호생성기

양순이 2021. 2. 4. 21:33
728x90

* 출처 SWEA

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

내 생각

 

1. 첫번째 풀이

 

단순한 큐 문제! 다만, 여기서 이중 반복문을 2번 방법에서는 단일 반복문으로 바꿔보았다.

public class SWEA_1225 {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int T = 10;
		for(int tc=1;tc<=T;tc++) {
			int tcNum = Integer.parseInt(in.readLine());
			
			Queue<Integer> queue = new LinkedList<>();
			st = new StringTokenizer(in.readLine());
			
			//init queue
			for(int i=0;i<8;i++) {
				int num = Integer.parseInt(st.nextToken());
				queue.offer(num);
			}
            
			int qPoll = -1;
			boolean isZero = false;
            
			while(true) {
				for(int i=1;i<=5;i++) {
					qPoll = queue.poll();
					qPoll -= i;
					
					if(qPoll <= 0) {
						qPoll = 0;
						queue.offer(qPoll);
						isZero = true;
						break;
					}
					queue.offer(qPoll);
					
				}
				if(isZero) break;
			}
			
			System.out.print("#"+tc+" ");
			for(int i=0;i<8;i++) {
				System.out.print(queue.poll()+" ");
			}
			System.out.println();
		}
	}
}

2. 두번째 풀이

위의 이중 반복문을 아래와 같이 바꾼다.

모듈 연산자를 이용해서 계속 반복할 수 있다는 점을 기억하자!

			int minus = 0;

			while (true) {
				minus = minus % 5 + 1;
				qPoll = queue.poll();
				qPoll -= minus;
				if(qPoll<=0) {
					qPoll = 0;
					queue.offer(qPoll);
					break;
				}
				queue.offer(qPoll);

			}

or

		int sub = 1;
		int number = -1;
		while (number != 0) {
			number = q.poll();
			number -= sub;
			if(number<=0) number = 0;
			q.offer(number);
			sub = sub % 5 + 1;
		}
728x90
Comments