728x90
문제
아우으 우아으이야!! 으어아아아아아아아ㅏㅏㅏ아아앙ㅇ아아ㅏ
수직선 위에 선분을 여러 개 그릴 거 야아아앙ㅇ아아아ㅏㅏ아아ㅏㅏ!!
선분을 겹치게 그리는 것도 가능하다아어으우어우으아아아아아아아아아이야!!!!1
선분을 모두 그렸을 때, 수직선 위에 그려진 선분 길이의 총합은 얼마아아으으우어으이으야이야!!!!
입력
첫째 줄에 수직선 위에 그릴 선분의 개수 N이 주어진다아우으 우아으이야!!. (1 ≤ N ≤ 100,000)
둘째 줄 부터 N개의 줄에 좌표를 나타내는 정수쌍 (x, y)가 주어진다으어아아아아아아아ㅏㅏㅏ아아앙ㅇ아아.
이는 [x, y] 구간 (x와 y를 포함하는 구간)에 선분을 그린다는 의미이다유아아우응아이양.
좌표는 x가 증가하는 순으로, x가 같다면 y가 증가하는 순으로 주어진다으우오아앙아ㅓㅇ아ㅡㅇ. (-1,000,000,000 ≤ x < y ≤ 1,000,000,000)
출력
N개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!
해결 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
//최소 시작점
int start = Integer.parseInt(st.nextToken());
//최소 끝점
int end = Integer.parseInt(st.nextToken());
//수직선 합
int sum = 0;
//모든 점의 수직선 확인
for(int i=0;i<N-1;i++){
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
//이전 수직선보다 뒤에 있는 수직선인 경우 수직선 교체
if(x > end){
sum += end - start;
start = x;
end = y;
}
//이전 수직선의 끝점보다 뒤에 있는 끝점인 경우 수직선 연장
if(end < y){
end = y;
}
}
//남은 수직선 추가
sum += end - start;
System.out.println(sum);
}
}
실행 결과

팁
- 시작점과 끝점이 언제 바뀌는지 생각해보자
'알고리즘 문제 풀이 > 해결코드' 카테고리의 다른 글
[백준 - 9024][GOLD 5][해설 X] - 두 수의 합 (JAVA) (0) | 2024.06.05 |
---|---|
[백준 - 2262][GOLD 4][해설 X] - 토너먼트 만들기 (JAVA) (0) | 2024.06.05 |
[백준 - 3151][GOLD 4][해설 X] - 합이 0 (JAVA) (0) | 2024.05.31 |
[백준 - 17305][GOLD 4][해설 X] - 사탕 배달 (JAVA) (0) | 2024.05.31 |
[백준 - 13910][GOLD 5][해설 X] - 개업 (JAVA) (0) | 2024.05.29 |