이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Baekjoon] 2170: 선 긋기

  • 2023.03.02 11:35
  • Algorithm/PS
글 작성자: SeoArc

문제

선을 정해진 횟수만큼 긋고 최종 길이를 구하는 단순 스위핑 문제이다.

 

풀이

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class Q2170 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());

        Queue<long[]> pq = new PriorityQueue<>(Comparator.comparingLong(c -> c[0]));
        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split(" ");
            pq.offer(new long[]{Long.parseLong(input[0]), Long.parseLong(input[1])});
        }

        long[] poll = pq.poll();
        long start = poll[0];
        long end = poll[1];

        long total = 0;
        while (!pq.isEmpty()) {
            long[] cur = pq.poll();
            long left = cur[0];
            long right = cur[1];
            if (left <= end) {
                if (right > end) {
                    end = right;
                }
                continue;
            }
            total += end - start;
            start = left;
            end = right;
        }
        total += end - start;

        System.out.println(total);
    }
}

최소힙에 값을 삽입하여 겹치면 계속 오른쪽 값을 갱신하고, 겹치지 않으면 총 길이에 더하여 좌우값을 다시 갱신하는 형식으로 구현했다.

처음에 계속 틀려서 이유를 확인해봤더니, 겹칠때 오른쪽 값이 기존 값보다 작다면 갱신하지 않아야된다는 조건을 생각하지 못했다..

 

예를 들어,

1 5

2 4

의 값이 들어온다면 최종적으로 1 5에 선이 그려져 길이는 4가 되야하지만

겹치면 오른쪽 값을 계속 갱신해버린 탓에 1 4가 최종 선이 되어 3이 되어버린 것이다.

 

스위핑 문제를 접하게 되면 이와 같은 예시는 주의하자

 

회고

스위핑 개념을 배운지 얼마되지 않아 반례 생각하는게 좀 힘들었던 것 같다.

좀 더 관련된 문제를 많이 풀어봐야겠다.

 

'Algorithm > PS' 카테고리의 다른 글

[Baekjoon] 2533: 사회망 서비스(SNS)  (0) 2023.03.02
[Baekjoon] 1655: 가운데를 말해요  (0) 2023.03.02
[Baekjoon] 9935: 문자열 폭발  (2) 2023.03.02
[Baekjoon] 16934: 게임 닉네임  (0) 2023.03.02
[Baekjoon] 1138: 한 줄로 서기  (0) 2023.02.26

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Baekjoon] 2533: 사회망 서비스(SNS)

    [Baekjoon] 2533: 사회망 서비스(SNS)

    2023.03.02
  • [Baekjoon] 1655: 가운데를 말해요

    [Baekjoon] 1655: 가운데를 말해요

    2023.03.02
  • [Baekjoon] 9935: 문자열 폭발

    [Baekjoon] 9935: 문자열 폭발

    2023.03.02
  • [Baekjoon] 16934: 게임 닉네임

    [Baekjoon] 16934: 게임 닉네임

    2023.03.02
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • network
  • 알고리즘
  • 자바
  • java
  • algorithm
  • graph
  • 그래프
  • 네트워크

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바