algorithm

백준 14469(JAVA)

yjs3819 2021. 7. 17. 11:35
728x90

문제

소가 입장하는 시간을 최소로 하라!

풀이

소가 도착하는 시간을 기준으로 정렬 -> 같으면 소가 대기하는 시간을 기준으로 정렬을 한다.
그다음 걸리는 시간을 계산하면 소가 대기하는 시간을 최소, 즉 버리는 시간을 최소로 할수있다.

코드

package baekjoon.그리디;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

class Cow{
    int arrive;
    int time;

    public Cow(int arrive, int time){
        this.arrive = arrive;
        this.time = time;
    }

    public int getArrive() {
        return arrive;
    }

    public int getTime() {
        return time;
    }
}

public class Main14469 {
    static int N;
    static List<Cow> list = new ArrayList<>();


    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());

        for(int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            list.add(new Cow(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
        }

        Collections.sort(list, Comparator.comparingInt(Cow::getArrive)
                .thenComparing(Cow::getTime));
        // 걸리는 최소시간을 위해 정렬

        long times = list.get(0).getTime() + list.get(0).getArrive();
        for(int i = 1; i < N; i++){
            if(list.get(i).getArrive() > times){
                times = list.get(i).getArrive() + list.get(i).getTime();
            }else{
                times += list.get(i).getTime();
            }
        }

        System.out.println(times);
    }
}
/**
 * 소가 입장하는 시간을 최소로하려면
 * 소가 도착한 시간을 기준으로 정렬 -> 같으면 대기시간 기준으로 정렬을해야한다
 * 그래야 버리는 시간을 최소로 할수있다.
 *
 * type 은 long으로
 */
728x90

'algorithm' 카테고리의 다른 글

백준 13904(JAVA)  (0) 2021.07.20
백준 1105(JAVA)  (0) 2021.07.19
백준 11000(JAVA)  (0) 2021.07.16
백준 9009(JAVA)  (0) 2021.07.14
백준 9081(JAVA)  (0) 2021.07.14