[C++] 백준 2565 - 전깃줄

2023. 8. 24. 01:28·알고리즘 문제풀이/백준
반응형

https://www.acmicpc.net/problem/2565

 

2565번: 전깃줄

첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는

www.acmicpc.net

<알고리즘 분류>

   - 다이나믹 프로그래밍(Dynamic Programming)

 

<풀이> 

   예제 입력 1을 참고하여, x축은 전봇대 A에서 나가는 전깃줄, y축은 전봇대 B의 전깃줄을 표시해 봤다. 백준 사이트의 예제 입력을 보면서 이 그림을 보면 된다. 

  자, 이렇게 정리하면 B전봇대 기준에서의 수열은 [8, 2, 9, 1, 4, 6, 7, 10] 이다. 

 

  여기서 곰곰이 생각해 봤다. 문제에서 "없애야 하는 전깃줄의 최소 개수" 의 의미를. 

  이 말을 조금 바꿔보면, "[전깃줄의 총 개수 N] - [없앨 필요 없는 전깃줄의 최대 개수]" 임을 알게 됐고, 

[없앨 필요 없는 전깃줄의 최대 개수] = [가장 긴 증가하는 부분 수열의 길이] 임을 알게 됐다!!!!!!!!!!!!!!!!

  

따라서, 주어진 수열(A전봇대 기준으로 오름차순 정렬, B전봇대의 값들을 모아놓은 수열)

[8, 2, 9, 1, 4, 6, 7, 10]

에서의 가장 긴 증가하는 부분수열의 길이를 구하면 된다.

 

가장 긴 증가하는 부분수열의 길이 알고리즘은 다음 문제를 풀면 도움이 된다. 

-> 백준 11053번 : 가장 긴 증가하는 부분수열의 길이 

https://www.acmicpc.net/problem/11053

 

<코드>

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int n;
int dp[101];
int arr[101];
int LISNum = 0;

void LIS(){ //LIS : O(n^2)
    
    for (int i = 1; i <= n; i++)
    {
        dp[i] = 1;
        for (int j = i - 1; j >= 1; j--)
        {
            if (arr[i] > arr[j])
            {
                dp[i] = max(dp[i], dp[j] + 1);
            }
        }
        LISNum = max(dp[i], LISNum);
    }
    
}
int main(){

    priority_queue <pair<int, int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;

    cin >> n;
    for (int i=0; i<n; i++){
        int x, y;
        cin >> x >> y;
        pq.push({x,y});
    }
    int index=0;
    while(!pq.empty()){
        index++;
        arr[index] = pq.top().second;
        pq.pop();
    }

    LIS();

    cout << n - LISNum;
}
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[C++] 백준 2110 - 공유기 설치  (0) 2023.08.28
[C++] 백준 1450 - 냅색문제  (1) 2023.08.26
[C++] 백준 2056 - 작업  (2) 2023.08.18
[C++] 백준 1238 - 파티  (0) 2023.08.16
[C++] 백준 13975 - 파일 합치기 3  (0) 2023.08.14
'알고리즘 문제풀이/백준' 카테고리의 다른 글
  • [C++] 백준 2110 - 공유기 설치
  • [C++] 백준 1450 - 냅색문제
  • [C++] 백준 2056 - 작업
  • [C++] 백준 1238 - 파티
jiminai
jiminai
안녕하세요, 고려대학교 컴퓨터학과 학부생의 컴퓨터 공부 기록입니다👻
    반응형
  • jiminai
    컴퓨터 공부 Blog
    jiminai
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • AI Paper Review (9)
        • MLLMs (4)
        • Reinforcement Learning (2)
        • NLP (3)
      • 알고리즘 문제풀이 (18)
        • 백준 (17)
        • 프로그래머스 (1)
        • 알고리즘 이론 공부 (0)
      • AI 개념 정리 (2)
        • Pytorch 공부 (1)
      • Web Development (1)
      • 대외활동&프로젝트&대회 (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 프로필
    • Github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발
    DP
    dfs
    HACKUTHON 2023
    가장긴증가하는부분수열
    백준
    누적합
    두 배열의 합
    벡준
    2056
    다이나믹프로그래밍
    13975
    냅색문제
    11000
    이분탐색
    2467
    BFS
    fasttext
    투포인터
    Dikjstra
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jiminai
[C++] 백준 2565 - 전깃줄
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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