본문 바로가기
알고리즘/SWExpert

SWExpert_1225_암호생성기

by 박 현 황 2021. 2. 4.

문제링크

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14uWl6AF0CFAYD&categoryId=AV14uWl6AF0CFAYD&categoryType=CODE&problemTitle=+%EC%95%94%ED%98%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com

 

 

 


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

public class Solution_1225 {
	/*offer - Queue에 삽입
	peek() - 맨 앞 element를 반환 ( 삭제 x )
	poll() - 맨 앞 element를 반환하고 삭제*/
	private static int T;
	private static int minusNumber=1;
	private static Queue<Integer> queue;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		queue = new LinkedList<Integer>();
		
		for(int i=0;i<10;i++) {
			T = sc.nextInt(); //테스트 케이스 번호 입력
			
			for(int j=0;j<8;j++) {
				queue.offer(sc.nextInt());
			} //queue에 값 입력

			while(true) {
				 /*
				 -첫 번째 숫자를 1 감소한 뒤, 맨 뒤로 보낸다. 

				 다음 첫 번째 수는 2 감소한 뒤 맨 뒤로, 그 다음 첫 번째 수는 3을 감소하고 맨 뒤로, 그 다음 수는 4, 그 다음 수는 5를 감소한다.

				 이와 같은 작업을 한 사이클이라 한다.

				 - 숫자가 감소할 때 0보다 작아지는 경우 0으로 유지되며, 프로그램은 종료된다. 이 때의 8자리의 숫자 값이 암호가 된다.*/
				if((queue.peek()-minusNumber)<=0) {
					queue.offer(0);
					queue.poll();
					minusNumber = 1;
					break;
				}

				queue.offer(queue.poll()-minusNumber);
				minusNumber++;
				if(minusNumber == 6)
					minusNumber = 1;
			}

			System.out.print("#"+T+" ");
			for(int j=0;j<8;j++)
				System.out.print(queue.poll()+" ");
			System.out.println();
			queue.clear();

		}
		
	}
}

 

진짜 개쉬운 문제인데 문제 푸는데 진짜 오래걸려서 화딱지나는 줄 알았다.

 

 

오래 걸린 이유 1.

문제 설명인데 문제를 잘못이해했다.

첫번째 숫자,두번째 숫자,,, 이렇게가 1-5주기로 도는 건데

맨처음에 <0보다 작은 경우이때 다시 1로 돌아가는 주기를 가지는 줄 알고 풀어서

진짜 답이 근처에도 안나와서 아는 사람한테 내가 문제 제대로 이해한건지 물어봤다.

 

 

오래걸린 이유 2.

값은 얼추 비슷하게 나오는데 정확하게 안나왔다.

중간중간 syso로 찍으면서 확인해봐도 이게 숫자가 크니까 하나하나 다보기도 힘들었다.

확인해보니까 계속 새로 돌리면서 하나씩 찍으면 다 제대로 나오는데 10개 연속으로 찍으니까 답이 안나오는 거임 진짜 화딱지 나서 좀 쉬다가 다시 보니까 진짜 갑자기 번뜩 떠올랐다.

	if((queue.peek()-minusNumber)<=0) {
					queue.offer(0);
					queue.poll();
					minusNumber = 1;
					break;
				}

이 부분에서도 break; 되면서 이 암호는 끝이나고 새로 큐를 입력받아 -1씩 해가야하는데

내가 여기서 minusNumber를 1로 초기화를 안시켜줘서 새로 큐를 입력받아도 그 이전 값으로 계속 빼니가 값이 안나왔던 것이었다. ^^1바

'알고리즘 > SWExpert' 카테고리의 다른 글

SWExpert_1223_계산기2  (0) 2021.02.06
SWExpert_3499_퍼펙트 셔플  (0) 2021.02.05
SWExpert_2001_파리퇴치  (0) 2021.02.03
SWExpert_2805_농작물 수확하기  (0) 2021.02.03
SWExpert_1873_상호의 배틀필드  (0) 2021.02.03