[파이썬/python] 백준 2785- 체인

2024. 9. 7. 22:56·알고리즘
반응형

문제

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

문제 설명

  1. N개의 체인이 존재한다.
  2. 각각의 체인은 여러 개의 고리로 이루어져 있다.
    1. 길이가 3인 체인 -> 고리가 3개인 체인
  3. 체인을 분리하거나 연결하여 두 개의 체인을 하나의 긴 체인으로 변경할 수 있다.
  4. 모든 체인을 하나의 체인으로 묶기 위해 필요한 최소한의 고리를 찾아라.

 

 

<예시 1>

1. 길이가 1인 체인(고리가 1개로 이루어진)이 3개가 존재한다.

 

2. 가운데 체인을 연다.

 

3. 양 끝 체인을 연결한다.

 

4. 가운데 체인을 닫는다.


풀이

하나의 체인을 전부 다 사용해서 체인들을 연결한다면 최종적으로 사용하는 고리의 수가 줄어들게 된다. 따라서 고리의 개수가 낮은 것부터 길이가 긴 체인끼리 묶는다면 최소한의 고리를 사용하여 모든 체인을 하나로 묶을 수 있을 것이라 생각했다.

  1. 체인의 길이가 오름차순으로 정렬한다.
  2. start = 첫 번째 인덱스, end = 마지막 인덱스
  3. 첫 번째 체인의 길이가 0이 아니라면 고리를 하나 끊어 가장 긴 고리끼리 연결한다.
  4. 체인의 길이가 0이라면 start를 1 증가시켜 그다음으로 짧은 고리를 선택한다.
  5. start(제일 앞에 있는 체인)와 end(연결이 안 된 최장 체인)가 같아지면 모든 고리를 연결했다는 것이므로 반복문을 종료한다.

코드

import sys
input = sys.stdin.readline

N = int(input())
chains = list(map(int,input().split()))

chains.sort()
start = 0
end = N-1
cnt = 0
while start != end:
    if chains[start] > 0:
        chains[start]-=1
        end-=1
        cnt+=1
    else:
        start+=1
print(cnt)

시간복잡도

  • 최악일 경우 체인의 개수는 $5*10^5$개
  • 정렬할 때 걸리는 시간복잡도는 $nlog_2n$이므로 약 $O(5*10^5 * log_2(5*10^5))$
  • $10^3(1000) = 2^{10}(1024)$이므로 $10^5*5=2^{19}$정도로 치환이 가능하다.
    따라서 정렬의 시간복잡도는 약 $O(5*10^5 * 19)=O(10^7)$이다.
  • 체인의 길이는 체인의 개수 총합이 N보다 클 때 최악이다.
  • start와 end가 같아질 때 까지 반복하므로 가장 작은 체인의 길이가 $5*10^5$ 보다 클 때 약 $O(5*10^5)$ 만큼의 시간복잡도가 걸린다.
  • 따라서 최악일 경우 약 $O(10^7 + 5*10^5)$의 시간복잡도를 가진다.
반응형

'알고리즘' 카테고리의 다른 글

[파이썬/python] 백준 21317 - 징검다리 건너기  (1) 2024.09.08
[파이썬/python] 백준 1005 - ACM Craft  (1) 2024.09.08
[파이썬/python] 백준 14627- 파닭파닭  (0) 2024.09.07
[파이썬/python] 백준 17129 - 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유  (0) 2024.09.07
[파이썬/python] 백준 11578 - 팀원 모집  (0) 2024.09.07
'알고리즘' 카테고리의 다른 글
  • [파이썬/python] 백준 21317 - 징검다리 건너기
  • [파이썬/python] 백준 1005 - ACM Craft
  • [파이썬/python] 백준 14627- 파닭파닭
  • [파이썬/python] 백준 17129 - 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유
개골개굴
개골개굴
굶고 코딩하기
  • 개골개굴
    밥스토리
    개골개굴
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (144)
      • 알고리즘 (124)
      • Java (2)
      • 자기개발 (18)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    SMTP
    알고리즘
    springboot
    python
    컴퓨터 구조
    java
    백준
    작심삼일 챌린지
    인프런
    Redis
    completablefuture
    OS
    컴퓨터구조
    파이썬
    async
  • 최근 댓글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
개골개굴
[파이썬/python] 백준 2785- 체인
상단으로

티스토리툴바