[Python] 2565 - 전깃줄 (골드5)

2022. 6. 27. 01:45·Coding Test/Solution

1. 문제 설명

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

 

2565번: 전깃줄

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

www.acmicpc.net

 


2. 아이디어

그렇게 쉬운 문제는 아니었는데, 그 당시에 dp 문제만 주구장창 풀어서 금방 해결했었다.

어차피 전봇대 최대 개수는 500개 이하이므로 pole은 연결된 전봇대 정보 외엔 모두 False로 할당하고

cache는 그 중에서도 유효한 전봇대를 체크해줄 리스트로써 0으로 초기화 한다.

 

유효한 전봇대라니? 대체 그걸 어떻게 판단한다는 것인가.

이 문제가 전봇대로 나와서 그렇지 조금만 고민해보면 완전히 다른 문제로 접근이 가능하다.

 

예를 들어, 1~4번까지 전봇대가 B의 [4, 1, 2, 3] 전봇대와 연결되어 있다고 하자.

최소로 끊는 전깃줄은 A의 1번을 선택하면 됨을 알 수 있다.

그럼 남는 수가 [1, 2, 3]인데 이것만으로는 아직 패턴이 보이지 않았을 수 있다.

 

이번에는 순서대로 B의 [8, 2, 9, 1, 4, 6, 7, 10] 전봇대와 연결되어 있는 A전봇대가 있다고 가정할 때,

최소로 전깃줄을 끊은 후에 연결된 B의 전봇대는 [2, 4, 6, 7, 10]이다.

이전과 이번의 공통점을 찾았는가? 바로 결과가 가장 긴 증가수열이라는 것이다.

 

가장 긴 증가하는 부분 수열(BOJ-11053) 문제를 풀어본다면

이 문제와 매우 흡사한 코드로 해결할 수 있음을 알 수 있다.

 

현재 A의 전봇대와 이전의 모든 A 전봇대를 비교했을 때 교차하는 전선이 존재하고,

cache[현재] < cache[이전] + 1 이 성립한다면 이 구간은 감소수열이므로

이전 전봇대가 유효하지 않다고 판단하고 제거한다.

 

잘 이해가 가지 않는다면 가장 긴 증가하는 부분 수열 문제를 풀어보는 것이 좋다.

 


3. 코드

import sys
input = sys.stdin.readline

def solution():
    n = int(input())
    pole = [False]*501
    for _ in range(n):
        a, b = map(int, input().split())
        pole[a] = b
    cache = [1]*501

    for i in range(1, 501):
        if not pole[i]:
            continue
        for j in range(1, i):
            if not pole[j]:
                continue
            if pole[i] > pole[j] and cache[i] < cache[j] + 1:
                cache[i] = cache[j] + 1
    print(n - max(cache))

solution()
저작자표시 비영리 (새창열림)
'Coding Test/Solution' 카테고리의 다른 글
  • [Python] 1927 - 최소 힙 (실버2) : 최소 힙
  • [Python] 2666 - 벽장문의 이동 (골드5)
  • [Python] 10835 - 카드게임 (골드5)
  • [Python] 13302 - 리조트 (골드4)
나죽못고나강뿐
나죽못고나강뿐
싱클레어, 대부분의 사람들이 가는 길은 쉽고, 우리가 가는 길은 어려워요. 우리 함께 이 길을 가봅시다.
  • 나죽못고나강뿐
    코드를 찢다
    나죽못고나강뿐
  • 전체
    오늘
    어제
    • 분류 전체보기 (473) N
      • Computer Science (60)
        • Git & Github (4)
        • Network (17)
        • Computer Structure & OS (13)
        • Software Engineering (5)
        • Database (9)
        • Security (5)
        • Concept (7)
      • Frontend (22)
        • React (14)
        • Android (4)
        • iOS (4)
      • Backend (81)
        • Spring Boot & JPA (52)
        • Django REST Framework (14)
        • MySQL (10)
        • 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 (138)
        • Effective-Java (90)
        • Pragmatic Programmer (0)
        • CleanCode (11)
        • Clean Architecture (4)
        • 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)
        • 대규모 시스템 설계 (7)
        • JVM 밑바닥까지 파헤치기 (4)
        • The Pragmatic Programmer (1)
      • Service Planning (2)
      • Side Project (5)
      • AI (0)
      • MATLAB & Math Concept & Pro.. (2)
      • Review (22) N
      • Interview (3)
      • IT News (2)
  • 블로그 메뉴

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

    • 깃
  • 공지사항

    • 한동안 포스팅은 어려울 것 같습니다. 🥲
    • N Tech Service 풀스택 신입 개발자가 되었습니다⋯
    • 취업 전 계획 재조정
    • 취업 전까지 공부 계획
    • 앞으로의 일정에 대하여..
  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
나죽못고나강뿐
[Python] 2565 - 전깃줄 (골드5)

개인정보

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

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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