[C++] 2170 - 선 긋기 (골드5)

2022. 8. 5. 23:18·Coding Test/Solution

1. 문제 설명

 

 

2170번: 선 긋기

첫째 줄에 선을 그은 횟수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 다음 N개의 줄에는 선을 그을 때 선택한 두 점의 위치 x, y(-1,000,000,000 ≤ x < y ≤ 1,000,000,000)가 주어진다.

www.acmicpc.net

 


2. 아이디어

 

스와핑 관련 문제를 처음 봐서 찾아봤었다.

그렇게 어려운 로직이 아니었다.

일단 값을 입력받고 시작점 기준으로 정렬을 한 번 수행한다.

 

그 뒤로 길이를 체크해줄 left와 right 변수를 -INF로 설정해주고 right와 시작점을 비교한다.

시작점이 현재 right의 위치보다 작다면 right의 값을 끝점으로 옮길 것이지만,

그게 아니라면 입력받은 right와 left의 차이만큼 결과값에 저장하고 left와 right 각각에

시작점과 끝점을 할당하는 방식으로 돌아간다. 

 

시작점을 기준으로 정렬되어 있는 상태이기 때문에 만약 중첩되는 선분의 경우

right값이 갱신되면서 가장 긴 선분의 길이 한 번만 체크하게 되는 원리다.

 


3. 코드

#include <iostream>
#include <algorithm>

using namespace std;
typedef pair<int, int> p;
const int INF = 1e9;

int main() {
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n; cin >> n;

    p arr[1000000];
    for (int i=0; i<n; i++) {
        int x, y; cin >> x >> y;
        arr[i].first = x; arr[i].second = y;
    }
    sort(arr, arr+n);

    int left = -INF, right = -INF, answer=0;

    for (int i=0; i<n; i++) {
        if (arr[i].first < right) {
            right = max(right, arr[i].second);
        } else {
            answer += right - left;
            left = arr[i].first;
            right = arr[i].second;
        }
    }
    answer += right - left;

    cout << answer << endl;

    return 0;
}
저작자표시 비영리 (새창열림)
'Coding Test/Solution' 카테고리의 다른 글
  • [C++] 2130 - 수조 (플래티넘5)
  • [C++] 13334 - 철로 (골드2)
  • [C++] 1708 - 볼록 껍질 (플래티넘5)
  • [C++] 10999 - 구간 합 구하기 2 (플래티넘4)
나죽못고나강뿐
나죽못고나강뿐
싱클레어, 대부분의 사람들이 가는 길은 쉽고, 우리가 가는 길은 어려워요. 우리 함께 이 길을 가봅시다.
  • 나죽못고나강뿐
    코드를 찢다
    나죽못고나강뿐
  • 전체
    오늘
    어제
    • 분류 전체보기 (455) N
      • Computer Science (60)
        • Git & Github (4)
        • Network (17)
        • Computer Structure & OS (13)
        • Software Engineering (5)
        • Database (9)
        • Security (5)
        • Concept (7)
      • Frontend (21)
        • React (13)
        • Android (4)
        • iOS (4)
      • Backend (77)
        • Spring Boot & JPA (50)
        • Django REST Framework (14)
        • MySQL (8)
        • Nginx (1)
        • FastAPI (4)
      • DevOps (24)
        • Docker & Kubernetes (11)
        • Naver Cloud Platform (1)
        • AWS (2)
        • Linux (6)
        • Jenkins (0)
        • GoCD (3)
      • Coding Test (112)
        • Solution (104)
        • Algorithm (7)
        • Data structure (0)
      • Reference (134)
        • Effective-Java (90)
        • Pragmatic Programmer (0)
        • CleanCode (11)
        • Clean Architecture (2)
        • Test-Driven Development (4)
        • Relational Data Modeling No.. (0)
        • Microservice Architecture (2)
        • 알고리즘 문제 해결 전략 (9)
        • Modern Java in Action (0)
        • Spring in Action (0)
        • DDD start (0)
        • Design Pattern (6)
        • 대규모 시스템 설계 (6)
        • JVM 밑바닥까지 파헤치기 (4)
      • Service Planning (2)
      • Side Project (5)
      • AI (0)
      • MATLAB & Math Concept & Pro.. (1)
      • Review (16) N
      • Interview (1)
      • IT News (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃
  • 공지사항

    • 취업 전 계획 재조정
    • 취업 전까지 공부 계획
    • 앞으로의 일정에 대하여..
    • 22년 동계 방학 기간 포스팅 일정
    • 중간고사 기간 이후 포스팅 계획 (10.27~)
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
나죽못고나강뿐
[C++] 2170 - 선 긋기 (골드5)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.