https://www.acmicpc.net/problem/29791
스킬 단축키 누른 시간을 오름차순 정렬한다.
에르다 100초마다 사용가능, 오리진 360초마다 사용가능
-> 스킬을 실제로 사용한 시점에서 각각 100초, 360초 뒤면 사용할 수 있도록
사용가능 시간을 갱신해주며 카운트를 한다.
우연히 알게된 것인데 에르다, 오리진 스킬의 각각 누른 시점을 나열한 입력값
2,3번째 줄에 입력이 되는데 이때 StringTokenizer로 받았다.
2,3번째 각각의 입력개수가 n,m인데 만약에 갯수를 모르는 상태에서 토큰을 끝까지 뽑으려면 어떻게 해야할까?
-> while(st.hasMoreTokens()){...}
로 hasMoreTokens()으로 Tokens이
남아있는지 확인할 수 있다.
import java.util.*;
import java.io.*;
public class _29791 {
public static void main(String[] args)throws IOException{
// 1. 입력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
ArrayList<Integer> erda = new ArrayList<>();
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
erda.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(erda); // 오름차순 정렬
ArrayList<Integer> origin = new ArrayList<>();
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
origin.add(Integer.parseInt(st.nextToken()));
}
Collections.sort(origin); // 오름차순 정렬
// 2. 사용횟수 계산
int whenUseErda = 0; // erda 스킬 사용시간
int howManyErda = 0; // erda 스킬 사용횟수
int whenUseOrigin = 0; // origin 스킬 사용시간
int howManyOrigin = 0; // origin 스킬 사용횟수
for(int i=0;i<erda.size();i++){
int curErda = erda.get(i);
if (curErda >= whenUseErda){
whenUseErda = curErda + 100; // 스킬 100초마다 사용가능
howManyErda++;
}
}
for(int i=0;i<origin.size();i++){
int curOrigin = origin.get(i);
if (curOrigin >= whenUseOrigin){
whenUseOrigin = curOrigin + 360; // 스킬 360초마다 사용가능
howManyOrigin++;
}
}
// 3. 출력
System.out.println(howManyErda+" "+howManyOrigin);
}
}
백준 29791 - 자바 잘 읽고 갑니다~ 공감과 댓글 남기고 가요~번창하세요^^