본문 바로가기
Problem Solving/SWEA

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

by 테리는당근을좋아해 2020. 2. 26.

문제

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

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

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

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

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

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

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

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

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

 

풀이방법

N, B, E와 N개의 정수 a[n]이 입력으로 주어졌을 때, 

 

첫번째 B를 a[i]로 나눈 값이 E보다 작거나 같은지 확인한다.(B - E초 안에 포함되는 경우)

 

첫번째 경우를 만족하지 않는다면 B를 a[i]로 나눈 몫 + 1에  a[i]를 다시 곱해 B를 뺏을 때 이 값이 E보다 작거나 같은지 확인한다.

(B + E초 안에 포함되는 경우)

 

소스코드

package samsung;

import java.util.*;

public class s_8457 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int tc = sc.nextInt();
		
		for(int t = 1; t <= tc; t++) {
			int n = sc.nextInt();
			int b = sc.nextInt();
			int e = sc.nextInt();
			int cnt = 0;
			
			for(int i = 0; i < n; i++) {
				int tmp = sc.nextInt();
				if(b % tmp <= e) {
					cnt++;
					continue;
				}
				else {
					int a = b / tmp;
					if((tmp * (a + 1) - b) <= e){
						cnt++;
					}
				}
			}
			System.out.println("#" + t + " " + cnt);
		}
	}
}

 

댓글