inblog logo
|
LHS's Study Space
    알고리즘문제풀기랜덤마라톤

    [랜덤 마라톤] 아우으 우아으이야!!(15922)

    lhs's avatar
    lhs
    Nov 18, 2024
    [랜덤 마라톤] 아우으 우아으이야!!(15922)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리
    www.acmicpc.net
    https://www.acmicpc.net/problem/15922
    notion image
    notion image

    1. 문제 풀이 아이디어

    • 문제에서 선분이 이미 정렬되어 있으므로, 각 선분의 x와 y 값을 이전 입력의 최대 y 값과 비교하여 계산하면 문제를 해결할 수 있다.

    2. 나의 정답 코드

    public class Main { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(bufferedReader.readLine()); int max = Integer.MIN_VALUE; int result = 0; for (int i = 0; i < n; i++) { StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); int x = Integer.parseInt(stringTokenizer.nextToken()); int y = Integer.parseInt(stringTokenizer.nextToken()); if (x > max) { max = y; result += y - x; } else { if (y <= max) { continue; } result += y - max; max = y; } } System.out.println(result); bufferedReader.close(); } }

    3. 정리

    • 선분을 입력받을 때마다 이전 y의 최대값과 입력된 x와 y를 비교한다.
    • 먼저 x 값을 비교하여 x보다 이전의 max가 크면 선분은 겹치지 않는 것이므로 선분의 길이 y - x를 result에 더하고, max는 현재 y 값으로 갱신한다.
    • x가 max보다 작거나 같다면, 선분이 겹칠 가능성이 있으므로 y 값을 비교한다.
    • 만약 y가 이전 max보다 작거나 같으면 현재 선분은 이전 선분에 포함되므로 넘어간다.
    • y가 max보다 크다면 선분이 겹치는 것이므로, 겹치지 않는 현재 선분의 길이인 y-max를 result에 더하고, max 값을 현재 y로 갱신한다.
    • 이 과정을 모든 선분에 대해 반복하면 최종적으로 선분의 길이 합을 구할 수 있다.
    Share article

    LHS's Study Space

    RSS·Powered by Inblog