728x90
1911번: 흙길 보수하기
어젯밤 겨울 캠프 장소에서 월드 본원까지 이어지는, 흙으로 된 비밀길 위에 폭우가 내려서 N(1 ≤ N ≤ 10,000)개의 물웅덩이가 생겼다. 월드학원은 물웅덩이를 덮을 수 있는 길이가 L(1 ≤ L ≤ 1,000
www.acmicpc.net
🤔 문제분석
오름차순으로 정렬한뒤, 위치를 가르키는 임의의 변수를 활용하여 문제를 해결하였습니다. 여기서 포인트는 임의의 위치의 변수를 start가 더 클경우 pos를 start로 초기화 시켜줍니다. pos가 end에 도달 할때까지 개수를 증가시키며 pos에 L을 더합니다.
💻 코드
import sys
input = sys.stdin.readline
N, L = map(int, input().split())
water = []
for _ in range(N):
water.append(tuple(map(int, input().split())))
water.sort()
pos = 0
cnt = 0
for start, end in water:
if start > pos:
pos = start
while end > pos:
pos += L
cnt += 1
print(cnt)
🎯 피드백 및 개선사항
수학적인 개념을 활용하여 시간복잡도를 줄일 수 있습니다. 나머지 연산을 활용하여 L로 얼마나 나눌 수 있는지 개수를 카운팅하고 나머지가 1보다 크다면 하나더 증가시켜 주어야합니다.
from sys import stdin
input = stdin.readline
n, l = map(int, input().split())
p = []
for i in range(n):
p.append(list(map(int, input().split())))
p.sort(key=lambda x: x[0])
last = p[0][0]
cnt = 0
for i in range(n):
if last < p[i][0]:
last = p[i][0]
ccnt = (p[i][1] - last) // l
if (p[i][1] - last) % l != 0:
ccnt += 1
# print(p[i][0], p[i][1], last, ccnt, cnt)
last += ccnt * l
cnt += ccnt
print(cnt)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1374번 : 강의실 (0) | 2024.02.16 |
---|---|
[백준] 1083번 : 소트 (0) | 2024.02.16 |
[백준] 13334번 : 철로 (0) | 2024.02.15 |
[백준] 13164번 : 행복 유치원 (0) | 2024.02.14 |
[백준] 8983번 : 사냥꾼 (0) | 2024.02.14 |