백준 1263 시간 관리 python, java

gobeul·2023년 9월 23일
0

알고리즘 풀이

목록 보기
37/70
post-thumbnail

회의실배정 유형의 문제방법으로 접근했다.
다만 나는 하루 시간이 24시간이라고 생각하고 풀어서 오답이 나왔는데,
문제에서는 그런 조건이 없으므로 하루 == 24시간 이라는 생각을 버리고 풀어야 한다.

📜 문제 바로 가기 : 시간 관리

제출코드

파이썬

import sys
input = sys.stdin.readline

n = int(input())
arr = []
for _ in range(n):
    arr.append(tuple(map(int, input().split())))

arr.sort(reverse=True, key=lambda x: x[1])

time = 1000000
for t, s in arr:
    time = min(s, time) - t
    if time < 0:
        time = -1
        break

print(time)

자바

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        Node[] arr = new Node[n];
        for (int i =0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int t = Integer.parseInt(st.nextToken());
            int s = Integer.parseInt(st.nextToken());
            arr[i] = new Node(t, s);
        }

        Arrays.sort(arr, new Comparator<Node>() {
            @Override
            public int compare(Node n1, Node n2) {
                return n2.s - n1.s;
            }
        });

        int time = 1000000;
        for (Node node : arr) {
            time = Math.min(time, node.s) - node.t;
            if (time < 0) {
                time = -1;
                break;
            }
        }

        System.out.println(time);

    }

    static class Node {
        int t;
        int s;

        public Node(int t, int s) {
            this.t = t;
            this.s = s;
        }
    }
}

접근방법

주어지는 할 일들을 마감시간이 늦은 순서대로 정렬한다.

time은 이전일이 끝나는 시간으로 생각한다.
(이전 일이란 시간상 이전을 의미하는것이 아닌 리스트상에서 이전 인덱스 값을 뜻한다.)
(처음에는 초기값을 24를 잡았지만 문제에서 하루가 24시간이라는 조건이 없었으므로 S의 가장 큰 값인 '백만'을 초기값으로 잡는다.)

최대한 늦장을 부려야 함으로 될 수 있다면 마감시간에 맞춰 끝내는 걸 목표로 잡는다.
하지만 현재 시간이 time보다 빠를 수 있다. 이때는 마감시간에 맞추는게 불가능 함으로 time에 끝내는 걸 맞춰야한다. 이를 위해서 min(time, s)를 사용했다.

시작시간은 0시라고 하였으므로 계산 후에 time값이 음수가 된다면 불가능한 일이 되버린다.

profile
뚝딱뚝딱

0개의 댓글

관련 채용 정보