개?발/SWEA

SWEA 22759. 묶음 판매

YUEIC 2025. 5. 22. 16:55

문제이해가 좀 힘들었다.

 

1. 손님이 살 물건 X 개는 N개로 이뤄진 묶음 여러개와 단품 몇개로 이뤄진다.

2. 이때 손님이 살 단품의 개수가 N의 절반 이상이라면 단품들 대신 묶음 한개를 더 산다.

3. 주어진 '손님이 살 물건의 개수 범위' 중 모든 상황에 '단품들 대신 묶음 한개를 더 사는' 경우가 존재할 경우 yes, 아닐 경우 no를 반환한다.

import java.util.Scanner;

public class Swea22759BundleSale {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        sc.nextLine();

        String[] answer = new String[t];

        for(int tc = 0 ; tc < t ; tc++){
            String[] line = sc.nextLine().split(" ");
            int[] range = new int[2];
            range[0] = Integer.parseInt(line[0]);
            range[1] = Integer.parseInt(line[1]);

            //range[0] < (range[1] + 1) / 2.0 는 사려는 물건의 '단품개수'가 '묶음상품의 단품개수' 의 절반 이상인지 판단
            //X % N 의 값(묶음만큼 제외한 나머지)은 항상 0~(N-1) 사이에 존재함, 그리고 그 값이 (N+1) / 2.0 보다 작으면 그냥 단품을 사게 됨.
            //즉 구매할 물건은 주어진 범위의 최소,
            //묶음이 개수는 범위의 최대로 지정하여 계산하면 반복문을 사용할 필요가 없음.
            //range[1] + 1을 하는 이유는 int 가 소수점 아래 자리를 버리기 때문에 올림을 하기 위함
            if(range[0] < (range[1] + 1) / 2.0){
                answer[tc] = "no";
            }else{
                answer[tc] = "yes";
            }
        }

        for(int i = 0 ; i < answer.length ; i++){
            System.out.println(answer[i]);
        }
    }
}

'개?발 > SWEA' 카테고리의 다른 글

SWEA 22039. 피보나치 수 분배  (0) 2025.05.22
SWEA 22574. 높은 곳으로  (0) 2025.05.22
SWEA 23003. 색상환  (0) 2025.05.21
SWEA 22979. 문자열 옮기기  (0) 2025.05.21
SWEA 22795. 일곱 부하의 평균  (0) 2025.05.21