[ BOJ / Python ] 2212번 센서

황승환·2021년 12월 31일
0

Python

목록 보기
71/498

이번 문제는 입력 받은 센서의 위치를 오름차순으로 정렬한 뒤에 가장 왼쪽에 있는 센서와 가장 오른쪽에 있는 센서 간의 거리를 구하고, 각 센서 간의 거리를 모두 담아둔 배열을 따로 만들고 이를 오름차순으로 정렬하여 가장 왼쪽과 오른쪽 간의 거리에 센서 간의 거리 배열을 앞에서부터 k-1개 빼주어 해결하였다. 99%에서 인덱스에러가 발생하여 코드를 분석해본 결과 n보다 k가 크거나 같을 경우, 즉 센서의 수보다 집중국의 수가 더 많거나 같을 경우에는 수신 가능영역의 길이의 합의 최소값은 0이 되는데 이 경우에 대한 예외 처리를 안해주었기 때문이었다. 이를 예외 처리하여 성공하였다.

  • n을 입력받는다.
  • k를 입력받는다.
  • 센서의 위치를 저장할 배열 arr을 선언하고 센서의 위치를 입력받는다.
  • arr을 오름차순 정렬한다.
  • arr[n-1] - arr[0]를 변수 gap에 저장한다.
  • arr의 구간별 거리를 저장할 배열 part_gap을 선언한다.
  • 만약 k가 n보다 크거나 같을 경우 집중국 하나당 센서 하나를 맡게 되므로 수신 가능 영역의 합은 0이 된다. 그러므로 gap을 0으로 갱신한다.
  • k가 n보다 작을 경우,
    -> n-1번 반복하는 i에 대한 for문을 돌린다.
    --> part_gap에 arr[i-1] - arr[i]의 결과를 담는다.
    -> part_gap을 내림차순 정렬한다.
    -> k-1번 반복하는 i에 대한 for문을 돌린다.
    --> gap에서 part_gap[i]을 빼준다.
  • gap을 출력한다.

Code

n=int(input())
k=int(input())
arr=list(map(int, input().split()))
arr.sort()
gap=arr[n-1]-arr[0]
part_gap=[]
if k>=n:
    gap=0
else:
    for i in range(n-1):
        part_gap.append(arr[i+1]-arr[i])
    part_gap.sort(reverse=True)
    for i in range(k-1):
        gap-=part_gap[i]
print(gap)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글