Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

시간이 NullNull

[JAVA] [SWEA] 8457. 알 덴테 스파게티 본문

알고리즘

[JAVA] [SWEA] 8457. 알 덴테 스파게티

4NIng 2020. 2. 23. 02:37

선표는 가게에서 처음으로 스파게티 면을 샀다. 봉투에 적힌 정보에 따르면, 면을 정확히 B초 동안 삶아야 이상적인 상태의 면이 된다고 한다.

그러나 안타깝게도, 지금 선표집의 모든 시계는 고장이 났다.

그래서 가게에서 모래시계를 하나 사서 집으로 가려고 한다.

가게에는 N개의 모래시계가 있고, i번째 모래시계는 정확히 xi초를 측정할 수 있다.

모래가 다 내려오면 바로 모래시계를 뒤집는 것으로 2xi초, 3xi초, …도 측정할 수 있다.

그러나 나머지 시간은 측정할 수 없다.

선표는 모래시계로는 정확한 시간을 측정할 수 없을 것 같아서, 조금 타협하여 E초 정도의 오차를 허용하려고 한다.

그러므로, 어떤 하나의 모래시계를 구입하여 B – E초에서 B + E초 중 하나를 측정해낼 수 있으면 된다.

구입해도 되는 모래시계의 개수를 구하는 프로그램을 작성하라

 

 

 

이 문제의 경우 사실 모든 모래시계를 확인하며 범위에 들어가는 지를 체크하는 방법 밖에 없다고 생각한다.

 

B-E 보다 초가 작을 경우 배수를 통해서 커질 수 있지만 B+E를 넘어설 경우 모래시계는 절때 범위에 포함될 수 없다는 것만 체크하면 될 것 같다.

 

전체 코드는 아래와 같다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
 
public class Solution {
 
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T = Integer.parseInt(br.readLine());
        String[] str = null;
        int n = 0;
        int b = 0;
        int e = 0;
        int[] clocks = null;
        int result = 0;
        int clock = 0;
        int cnt = 1;
        for(int t=1; t<=T; ++t) {
            str = br.readLine().split(" ");
            n = Integer.parseInt(str[0]);
            b = Integer.parseInt(str[1]);
            e = Integer.parseInt(str[2]);
            str = br.readLine().split(" ");
            clocks = new int[n];
            for(int i=0; i<n; ++i) {
                clocks[i] = Integer.parseInt(str[i]);
            }
            result = 0;
            for(int i=0; i<n; ++i) {
                clock = clocks[i];
                cnt = 1;
                while(clock*cnt <= b+e) {
                    if(clock*cnt >= b-e && clock*cnt <= b+e) {
                        result++;
                        break;
                    }
                    cnt++;
                }
            }
            bw.write("#"+t+" "+result+"\n");
        }
        br.close();
        bw.close();
    }
 
}
Comments