티스토리 뷰

1. 문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV5LsaaqDzYDFAXc&categoryId=AV5LsaaqDzYDFAXc&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=3&pageSize=10&pageIndex=2

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

2. 코드

  • seconds 배열 : 각 요소에 도착한 인원수 저장
  • maxArrivedSecond : 0초 ~ 11,111초 사이에 붕어빵을 사러 올 수 있다.
  • if (makedFish < seconds[passedSecond])
    • makedFish : 현재까지 만들어진 붕어빵 개수
    • seconds[passedSecond] : 현재 시간(passedSecond)에 붕어빵을 사러 온 인원수
    • 인원수만큼 제공할 붕어빵의 개수가 부족하다면 return false
class Solution {

    static int N, M, K;
    static int maxArrivedSecond = 11_111;
    static int[] seconds;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine());
        for (int t = 1; t <= T; t++) {
            sb.append("#" + t + " ");

            int[] inputArr = Arrays.stream(br.readLine().split(" "))
                    .mapToInt(Integer::valueOf)
                    .toArray();
            N = inputArr[0];
            M = inputArr[1];
            K = inputArr[2];

            seconds = new int[maxArrivedSecond + 1]; // 0 <= K <= 11_111
            inputArr = Arrays.stream(br.readLine().split(" "))
                    .mapToInt(Integer::valueOf)
                    .toArray();
            for (int i = 0; i < N; i++) {
                seconds[inputArr[i]]++; // inputArr[i] 시간에 오는 사람 1명 추가
            }

            sb.append(answer() ? "Possible" : "Impossible").append("\n");
        }

        System.out.println(sb);
    }

    static boolean answer() {
        int makedFish = 0; //만들어진 붕어빵 개수

        // passedSecond : 지나간 시간
        for (int passedSecond = 0; passedSecond <= maxArrivedSecond; passedSecond++) {
            if (passedSecond > 0 && passedSecond % M == 0) { // M초의 시간이 지나면 K개의 붕어빵을 만든다.
                makedFish += K;
            }

            if (seconds[passedSecond] > 0) { // 현재 시간에 도착한 사람이 1명 이상이라면
                if (makedFish < seconds[passedSecond]) { // 현재 시간에 도착한 사람보다 만들어진 붕어빵 개수가 적다면 종료
                    return false;
                }
                // 붕어빵을 가져간만큼 붕어빵 개수를 뺀다.
                makedFish -= seconds[passedSecond];
            }
        }

        return true;
    }
}

 

3. 예외

0초에도 붕어빵을 사러 올 수 있다.

입력:
1 1 1
0

정답:
0
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
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