티스토리 뷰
728x90
문제
풀이
고려해야할 점
더보기
- 선분의 겹침 처리: 여러 개의 선분이 주어졌을 때, 겹치는 부분을 제외하고 전체 선분의 총 길이를 구해야 합니다.
- 입력 순서: 선분들이 입력되는 순서가 정렬되어 있지 않을 수 있으므로, 시작점 기준으로 선분들을 정렬할 필요가 있습니다.
- 데이터 타입: 좌표의 범위가 매우 크거나 작을 수 있으므로, 오버플로우를 방지하기 위해 적절한 데이터 타입(long)을 사용해야 합니다.
문제 풀이 아이디어
더보기
- 선분 정렬: 시작점 기준으로 선분들을 정렬하여 겹치는 부분을 효율적으로 처리할 수 있도록 합니다.
- 현재 선분의 범위 추적:
- 변수 l과 r을 사용하여 현재까지의 유효한 선분의 시작점과 끝점을 추적합니다.
- 초기값으로 l은 가장 작은 값(Integer.MIN_VALUE)으로 설정하고, r은 총 길이를 저장하는 변수로 사용합니다.
- 겹치는 경우의 처리:
- 겹치지 않는 경우 (a >= l):
- 현재 선분이 이전 선분과 겹치지 않으므로, 선분의 길이 (b - a)를 총 길이에 더합니다.
- l을 현재 선분의 끝점 b로 업데이트합니다.
- 부분적으로 겹치는 경우 (a < l이고 b > l):
- 현재 선분이 이전 선분과 일부 겹치므로, 겹치지 않는 부분의 길이 (b - l)를 총 길이에 더합니다.
- l을 현재 선분의 끝점 b로 업데이트합니다.
- 완전히 겹치는 경우:
- 현재 선분이 이전 선분에 완전히 포함되면 추가적인 처리가 필요 없습니다.
- 겹치지 않는 경우 (a >= l):
코드
import java.io.*;
import java.util.*;
public class BOJ15922_아우으우아으이야 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 선분의 개수를 입력받습니다.
int n = Integer.parseInt(br.readLine());
StringTokenizer st;
// 현재 선분의 끝점을 저장할 변수 l과 총 길이를 저장할 변수 r을 초기화합니다.
long l = Integer.MIN_VALUE, r = 0;
for(int i = 0; i < n; i++) {
// 각 선분의 시작점(a)과 끝점(b)을 입력받습니다.
st = new StringTokenizer(br.readLine());
long a = Long.parseLong(st.nextToken());
long b = Long.parseLong(st.nextToken());
if(a >= l) {
// 현재 선분이 이전 선분과 겹치지 않는 경우
r += (b - a); // 선분의 길이를 총 길이에 더합니다.
l = b; // 현재 선분의 끝점을 업데이트합니다.
}
else if (b >= l) {
// 현재 선분이 이전 선분과 일부 겹치는 경우
r += b - l; // 겹치지 않는 부분의 길이를 더합니다.
l = b; // 현재 선분의 끝점을 업데이트합니다.
}
// 현재 선분이 이전 선분에 완전히 포함되는 경우는 처리하지 않습니다.
}
// 총 길이를 출력합니다.
System.out.print(r);
}
}
728x90
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] LV3. 산 모양 타일링 문제 풀이 (0) | 2024.12.09 |
---|---|
[백준] 3665번 최종순위 문제 풀이 (0) | 2024.11.10 |
[백준] 16562번 친구비 문제 풀이 (2) | 2024.11.05 |
[백준]4196번 도미노 문제풀이 (1) | 2024.10.30 |
[백준]2568번 전깃줄-2 문제 풀이 (0) | 2024.10.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 인프런강의
- 인프런
- 웹
- dataframe
- it도서큐레이션
- 제주코딩베이스캠프
- ssafy기자단
- 웹프로그래밍
- 백준알고리즘
- 알고리즘
- Python
- 인프런강의후기
- 백준
- 파이썬
- SSAFY
- 코딩테스트
- 프로그래머스
- 알고리즘이론
- 오블완
- 웹개발
- 생성형 AI
- numpy
- PANDAS
- 전자회로
- django
- 티스토리챌린지
- 위니브
- 더오름
- 위니브엠베서더
- SSAFYcial
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함
250x250