백준 BaekJoon 1773번: 폭죽쇼 [Java] 자바

2020-10-04


문제

학생들은 3주가 지난 기념으로

매점에서 1월 1일이 지나 싸게 파는 폭죽을 사서 터뜨리고 있다.

폭죽쇼를 하는 동안 N명의 학생들이 폭죽을 터뜨린다.

 

그리고 이 N명의 학생은 각각 일정한 주기로 폭죽을 터뜨린다.

물론 이 주기는 학생들마다 같을 수도, 다를 수도 있다.

그리고 우리는 초 단위로 관찰을 하고, 폭죽 역시 초 단위로 터진다.

폭죽쇼가 끝날 때까지 얼마나 많은 시간동안

밤하늘에 폭죽이 터지는 것을 볼 수 있는지 궁금해 하는 조교를 도와주자.

입력

첫 줄에 폭죽을 터뜨리는 학생의 수 N(1 ≤ N ≤ 100)과

폭죽쇼가 끝나는 시간 C(1 ≤ C ≤ 2,000,000)가 주어진다.

그 다음 N개의 줄에는

학생들이 폭죽을 터뜨리는 주기가 한 줄에 하나씩 주어진다.

주기는 1보다 크거나 같고, C보다 작거나 같은 자연수이다.

출력

폭죽쇼가 시작되고 끝날 때까지 밤하늘에 폭죽을 볼 수 있는 총 시간을 출력한다.

 


소스코드

		Scanner scan = new Scanner(System.in);
		int Student = scan.nextInt();
		int End = scan.nextInt();
		
		int [] timeline = new int [Student];
		int sum = 0;
		int mok = 0;
		
		for(int i = 0; i < Student; i++) {
			timeline[i] = scan.nextInt();
			mok = End / timeline[i];
			sum += mok;
		}
		//공배수 고려하지 않고 우선적으로
		//각 주기별 최대한 볼 수 있는 수를 구함
		

		boolean flag = true;
		//공배수 체크 변수
		for(int i = 1; i <= End; i++) {
			loop : for(int j = 0; j < Student; j++) {
				if(i % timeline[j] != 0 ) {
					flag = false;
					break loop;
					//학생들의 모든 주기가 다 0이 아니기 때문에
					//공배수 아님 flag false 변경 후 탈출
				}else {
					flag = true;
					//0 일 경우 true;
				}

			}
				
				if(flag) {
					sum--;
				}
				//모든 변수 체크 후 공배수일 경우
				//loop 탈출시 flag = true 값이 됨
				//때문에 기존에 구했던 sum에서 하나 빼줌
		}
		
		
		System.out.println(sum);

 

출처 링크 : www.acmicpc.net/problem/1773

 

1773번: 폭죽쇼

첫 줄에 폭죽을 터뜨리는 학생의 수 N(1 ≤ N ≤ 100)과 폭죽쇼가 끝나는 시간 C(1 ≤ C ≤ 2,000,000)가 주어진다. 그 다음 N개의 줄에는 학생들이 폭죽을 터뜨리는 주기가 한 줄에 하나씩 주어진다. 주�

www.acmicpc.net