삐까냥의 파도타기

1860. 진기의 최고급 붕어빵 본문

코딩/SW Expert Academy

1860. 진기의 최고급 붕어빵

금손형아 2017. 11. 15. 14:28

문제 출처 : https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LsaaqDzYDFAXc&categoryId=AV5LsaaqDzYDFAXc&categoryType=CODE


이 문제가 D3(어려움)인데, 정답률이 왜 40%인지 모르겠네요.


(다른 D3문제의 정답률 40% 이하인 문제보다 훨씬 쉬운 느낌이에요.)


고객은 붕어빵 하나씩만 구매할 수 있네요.


package sw;


import java.util.Collections;

import java.util.LinkedList;

import java.util.Scanner;


public class Q1860 {


static int N, M, K;

static LinkedList<Integer> peoples;

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int max = sc.nextInt();

for ( int i = 1; i <= max; i++ ) {

N = sc.nextInt(); //사람 수

M = sc.nextInt(); //붕어빵 만드는 쿨타임

K = sc.nextInt(); //붕어빨 만드는 개수


peoples = new LinkedList<Integer>(); //사람 목록

for ( int j = 0; j < N; j++ ) {

peoples.add(sc.nextInt());

}

Collections.sort(peoples); //도착 순서에 따른 정렬

System.out.println("#" + i + " " + getResult());

}

}

public static String getResult() {

int nowTime = 0, finishBbangNum = 0;


while ( !peoples.isEmpty() ) { //예약한 사람이 모두 올때 까지 반복 

while( peoples.getFirst() < nowTime + M ) { //다음 붕어빵 쿨타임 전까지 온 사람이 있으면 수행

if ( finishBbangNum == 0 ) { //사람 왔는데 팔수있는 붕어빵이 0개면

return "Impossible";

}

finishBbangNum -= 1; //붕어빵 하나 제거

peoples.removeFirst(); //사람 목록에서 제거

if ( peoples.isEmpty() ) { //모든 사람이 왔으면 종료

return "Possible";

}

}

nowTime += M; //붕어빵 쿨타임 더해서 다음 붕어빵시간 계산

finishBbangNum += K; //붕어빵 개수 추가

}

return "Possible";

}

}