

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