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

lhs's avatar
Nov 18, 2024
[랜덤 마라톤] 아우으 우아으이야!!(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의 최대값과 입력된 xy를 비교한다.
  • 먼저 x 값을 비교하여 x보다 이전의 max가 크면 선분은 겹치지 않는 것이므로 선분의 길이 y - xresult에 더하고, max는 현재 y 값으로 갱신한다.
  • xmax보다 작거나 같다면, 선분이 겹칠 가능성이 있으므로 y 값을 비교한다.
  • 만약 y가 이전 max보다 작거나 같으면 현재 선분은 이전 선분에 포함되므로 넘어간다.
  • ymax보다 크다면 선분이 겹치는 것이므로, 겹치지 않는 현재 선분의 길이인 y-maxresult에 더하고, max 값을 현재 y로 갱신한다.
  • 이 과정을 모든 선분에 대해 반복하면 최종적으로 선분의 길이 합을 구할 수 있다.
Share article

LHS's Study Space