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