백준 29791 - 자바

손찬호·2024년 6월 7일
1

알고리즘

목록 보기
60/91

https://www.acmicpc.net/problem/29791

풀이 아이디어

  1. 스킬 단축키 누른 시간을 오름차순 정렬한다.

  2. 에르다 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);
    }
}
profile
매일 1%씩 성장하려는 주니어 개발자입니다.

1개의 댓글

comment-user-thumbnail
2024년 6월 11일

백준 29791 - 자바 잘 읽고 갑니다~ 공감과 댓글 남기고 가요~번창하세요^^

답글 달기

관련 채용 정보