티스토리 뷰

알고리즘

백준 2212 - 파이썬

취뽀가자!! 2023. 4. 23. 20:36

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

 

2212번: 센서

첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있

www.acmicpc.net

문제 풀이

이 문제는 처음에 문제 설명을 이해하는데 시간이 걸렸던거 같다. 결론적으로는 k개만큼 구간을 설정하여 수신 길이가 최소값이 되도록 하는 것이다.

 

처음에 떠올린 아이디어는 다음과 같다.

 

1. 입련된 센서들을 정렬한다.

2. 수신 길이는 n//k보다 작아야 한다.

3. 수신길이가 n//k보다 작은 것을 기준으로 구간 설정하면 된다

4. 수신 길이는 구간별 좌표의 처음과 맨 끝을 비교 (좌표가 하나일 때는 자기 자신과 비교)

 

결과만 먼저 얘기하면 위 풀이를 코드로 풀어내지 못했다. 수신길이를 정해놓고 수신길이에 맞게 구간을 설정하려고 하니 너무 복잡했고 구현도 하지 못했다. 1시간 정도 고민 끝에 다른 사람의 풀이를 참고하기로 하였다.(항상 참고하는듯.. ㅠ)

 

import sys

n = int(sys.stdin.readline())
k = int(sys.stdin.readline())

# 1 3 6 6 7 9
pos = sorted(list(map(int, sys.stdin.readline().split())))

if k >= n:
  print(0)
  sys.exit()

dist = []

for i in range(1, n):
  dist.append(pos[i] - pos[i-1])

dist.sort(reverse=True)

for _ in range(k-1):
  dist.pop(0)

print(sum(dist))

입력된 센서들의 좌표값을 정렬하는것은 나와 같았다. 이 사람은 센서들마다의 거리를 리스트에 내림차순으로 정렬한 후 k-1개의 값을 날렸다. 

 

센서들의 좌표값을 정렬하면 [1,3,6,6,7,9]가 되고, 센서들의 거리를 내림차순 정렬하면 [3,2,2,1,0]이 된다. 여기서 k-1개만 날리게 되면 3이 날라가게 되는데, 이는 연결고리를 끊는것과 같다.

출처: https://journeytosth.tistory.com/16

 

이 문제를 풀면서 느낀점은 처음에 아이디어를 생각해 낼때 너무 추상적으로 떠올리고 코드로 구현한다는 점이 아쉬운거 같다.

기본적으로 주어진 예제 입력을 활용하여 오름차순 정렬을 해보든 내림차순 정렬을 해보든 여러가지 방법을 시도 후 코드로 구현을 하고자 하면 좀더 나을거 같다는 생각이 들었다. 그리디는 역시 일단 뭐든 때려박아보면서 다 해보는게 중요한거 같다. 또한 사람의 방식으로 문제를 풀려고 하는 것이 아닌 컴퓨터의 방식으로 생각하고 풀어내는 것이 중요한거 같다. 이 문제에서는 각 센서들의 거리를 내림차순으로 정렬 후 k-1개의 값을 날리면서 연결고리를 끊는 것을 표현하였는데, 이처럼  컴퓨팅적 사고방식이 중요한거 같다.

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

백준 1260 - 파이썬  (0) 2023.04.25
백준 2437 - 파이썬  (2) 2023.04.24
백준 11000 - 파이썬  (0) 2023.04.23
백준 1202 - 파이썬  (1) 2023.04.22
백준 1339 - 파이썬  (0) 2023.04.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함