-
[JAVA] 백준 13334 철로알고리즘 공부/문제 풀이 2021. 10. 22. 14:04
https://www.acmicpc.net/problem/13334
13334번: 철로
입력은 표준입력을 사용한다. 첫 번째 줄에 사람 수를 나타내는 양의 정수 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 각 줄에 정수 쌍 (hi, oi)가 주어진다. 여기서 hi와 oi는 −100,000,000이상, 100,000,0
www.acmicpc.net
이런 문제는 항상 오름차순 정렬을 하고 봐야하는 것 같다.
정렬한 후에 주어진 선분을 정보의 왼쪽이나 오른쪽 끝 값에 대보며 개수를 구하고, 반대쪽에서 정답 만족하는지 체크
이 문제 같은 경우는 오른쪽에 선분을 맞춰 이동시키며 왼쪽에서 정답 만족하지 않는 출근길들 빼내기
아래 블로그가 굉장히 설명이 잘 되어있다.
https://chanhuiseok.github.io/posts/baek-28/
[백준] 13334번 - 철로
컴퓨터/IT/알고리즘 정리 블로그
chanhuiseok.github.io
import java.util.*; import java.io.*; public class Main { public static class Info implements Comparable<Info>{ int left, right; public Info(int l, int r){ left = l; right = r; } public int compareTo(Info o){ if(right==o.right) return left-o.left; else return right-o.right; } } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); ArrayList<Info> list = new ArrayList<>(); for(int i=0;i<N;i++){ StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); list.add(new Info(Math.min(a,b), Math.max(a,b))); } int d = Integer.parseInt(br.readLine()); Collections.sort(list); PriorityQueue<Integer> pq = new PriorityQueue<>(); int answer = 0; for(int i=0;i<N;i++){ Info info = list.get(i); if(info.right - info.left>d) continue; pq.add(info.left); while(!pq.isEmpty()){ if(info.right-pq.peek()<=d) break; pq.poll(); } answer = Math.max(answer, pq.size()); } System.out.println(answer); } }
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[JAVA] 백준 21610 마법사 상어와 비바라기 (0) 2021.10.26 [JAVA] 백준 1766 문제집 (0) 2021.10.23 [JAVA] 백준 17136 색종이 붙이기 (0) 2021.10.18 [JAVA] 백준 17140 이차원 배열과 연산 (0) 2021.10.16 [JAVA] 백준 16438 원숭이 스포츠 (0) 2021.10.14