문제
https://www.acmicpc.net/problem/29791
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int countN = 1;
int countM = 1;
Queue<Integer> queue = new PriorityQueue<>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
queue.add(Integer.parseInt(st.nextToken()));
}
int lastSkillTime = queue.poll();
int lastImmunityTime = lastSkillTime;
for(int i = 1; i < N; i++){
int tmp = queue.poll();
if(tmp < lastSkillTime + 100){
continue;
}
lastSkillTime = tmp;
if(tmp >= lastImmunityTime + 90){
countN++;
lastImmunityTime = tmp;
}
}
queue.clear();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < M; i++){
queue.add(Integer.parseInt(st.nextToken()));
}
lastSkillTime = queue.poll();
lastImmunityTime = lastSkillTime;
for(int i = 1; i < M; i++){
int tmp = queue.poll();
if(tmp < lastSkillTime + 360){
continue;
}
lastSkillTime = tmp;
if(tmp >= lastImmunityTime + 90){
countM++;
lastImmunityTime = tmp;
}
}
System.out.println(countN + " " + countM);
}
}
단순 구현 문제다. 우선순위 큐를 통해 스킬이 사용된 시점을 먼저 순서대로 정렬한다. 이 후 이를 하나씩 뽑아서 사용한다.
만약 스킬 쿨타임이 돌지 않았다면 continue를 통해 건너뛴다.
스킬 쿨타임이 돼서 사용이 가능하다면 면역 시간을 확인하고 결정한다.
'문제 풀이 > 백준' 카테고리의 다른 글
[백준] 18428번. 감시 피하기(JAVA) (0) | 2024.09.11 |
---|---|
[백준] 16639번. 괄호 추가하기3(JAVA) (1) | 2024.09.05 |
[백준] 25192번. 인사성 밝은 곰곰이(JAVA) (0) | 2024.09.04 |
[백준]2583번. 영역 구하기(JAVA) (0) | 2024.05.11 |
[백준] 9095번. 1, 2, 3 더하기(JAVA) (0) | 2024.05.07 |