https://www.acmicpc.net/problem/1449
풀이 과정
그냥 풀게 되면 소수점 처리가 조금 난해하므로, 10을 곱해주어 정수로 풀이하는게 더 좋음.
- 파이프를 오름차순으로 정렬한다.
- 맨 왼쪽 파이프부터 순차적으로 파이프에 테이프를 붙인다.
- 현재 파이프 위치 - 5~ 현재 파이프 위치 + 5에 테이프가 붙어져있는지 확인
- 확인할 때, set에 해당 위치가 있는지 확인하는 방식으로 진행
- 전체가 붙어져있다면 다음 파이프 위치로 넘어간다.
- 전체가 붙여져있지 않다면 안붙여진 부분중 가장 왼쪽 위치에다가 테이프를 붙여주어야 한다.
- 테이프를 붙여줄 때, 붙이는 위치~붙이는 위치 + 10 * L를 Set에 넣어준다.
- 테이프를 붙인 다음, 테이프 카운트를 하나 늘려준다.
- 현재 파이프 위치 - 5~ 현재 파이프 위치 + 5에 테이프가 붙어져있는지 확인
- 붙인 테이프 개수를 출력한다.
소스 코드
import sys
input = lambda: sys.stdin.readline().rstrip()
N, L = map(int, input().split())
water = list(map(lambda x:int(x)*10, input().split()))
water.sort()
tape = set()
tape_count = 0
for pos in water:
start = 0
for i in range(-5, 6):
if pos+i not in tape:
start = pos+i
break
else:
continue
for p in range(start, start+(10*L)+1):
tape.add(p)
tape_count += 1
print(tape_count)
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 10812 ] 바구니 (0) | 2021.11.10 |
---|---|
[ 3055 ] [ BFS ] 탈출 (0) | 2021.11.09 |
[ 7662 ] [ heap ] 이중 우선순위 큐 (0) | 2021.11.07 |
[ 1202 ] [ heap ] 보석 도둑 (0) | 2021.11.06 |
[ 3085 ] [ 구현 ] 사탕 게임 (0) | 2021.11.05 |