https://www.acmicpc.net/problem/22234
골드5라는데..너무어렵다..ㅠ;;
다른사람 해답을 풀고 풀었다..
자료구조를 Queue(이미 작업중)와 PriorityQueue(중도난입)로 분리
초마다 시뮬레이션을 해줌 (매초를 세줄 curtime , 현재 Queue의 작업 진행도를 알려줄 jobcount 변수선언 )
시뮬레이션 진행중 매초마다 Pq 에 중도난입 인원이있는지 확인하고 있으면 Queue 에 넣어줌
작업이 100% 진행도 체크 하고 100%였으면 Queue에서 하나 방출
작업이 100%가 아니지만 할당시간이 끝나면 Queue를 빼주고 남은시간만큼 Queue에넣어주고 진행
// 4번과 5번 작업 할당시간이 끝낫기때문에 jobcount = 0으로 처리해줌
해당작업이 끝났다면 큐의 맨위 id를 출력해주고 시간(curtime)과 jobcount ++ 해주고 3번으로 이동 반복
import java.util.*;
import java.io.*;
class people implements Comparable<people>{
int p;
int t;
int c;
@Override
public int compareTo(people o) {
// TODO Auto-generated method stub
return this.c-o.c;
}
public people(int p, int t, int c) {
this.p = p;
this.t = t;
this.c = c;
}
}
public class 가희와은행 {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int T = Integer.parseInt(st.nextToken());
int W = Integer.parseInt(st.nextToken());
Queue<people> q = new LinkedList<>();
PriorityQueue<people> pq = new PriorityQueue<>();
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine());
int p = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
q.add(new people(p,t,0));
}
int pc = Integer.parseInt(br.readLine());
for(int i=0;i<pc;i++) {
st = new StringTokenizer(br.readLine());
int p = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
pq.add(new people(p,t,c));
}
StringBuilder sb = new StringBuilder();
int curtime = 0;
int jobcount=0;
while(curtime<W) {
int t = q.peek().t;
int p = q.peek().p;
// 은행에 도착햇는지 검사
if(!pq.isEmpty()&&pq.peek().c==curtime) {
q.add(pq.poll());
}
if(t-jobcount==0) { //작업이다끝나숴!!
q.poll();
jobcount=0;
}
else if(jobcount==T) { // 작업이 다안끝냇는데 할당시간이 끝난경우
q.add(new people(p,(t-jobcount),0));
q.poll();
jobcount=0;
}
sb.append(q.peek().p).append("\n");
curtime++;
jobcount++;
}
System.out.println(sb);
}
}
시뮬레이션 + Queue문제인데.. 골드5가맞나싶다.. 너무어려워..
ㅠㅠ 큐를 좀더 연습해봐야겠따 아직 능숙하지못한거같다.