백준_1499_수리공 항승

임정민·2023년 6월 4일
1

알고리즘 문제풀이

목록 보기
58/173
post-thumbnail

백준 그리디 문제풀이 입니다.

문제

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

[나의 풀이]

N, M = map(int, input().split(" "))

holes = list(map(int, input().split(" ")))
holes.sort()

# print(holes)

ans = 1
loc = holes[0]

for i in range(1, N):
    print("인덱스 : ", i)
    print("현재 위치 : ", loc, " 다음 위치 : ", holes[i])
    if holes[i] < loc + M:
        continue
    print("테이프 추가")
    ans += 1
    loc = holes[i]

print(ans)

그리디 문제입니다. 문제에서 보듯 현재 위치에서 막아야 하는 다음 파이프 위치까지의 거리를 파악하여 총 필요한 테이프 갯수를 구하는 문제입니다. 테이프를 붙히기 시작한 위치에서 테이프 길이만큼 커버되는 지점까지 1개의 테이프를 붙히고 그 이상 범위를 초과할 때 테이프를 추가하는 방식으로 해결하였습니다.🐹🐹🐹

[다른 사람의 풀이]

K, L = map(int, input().split())

coord = [False] * 1001
for i in map(int, input().split()):
  coord[i] = True

ans = 0   
x = 0
while x < 1001:
  if coord[x]:
    ans += 1
    x += L
  else:
    x += 1 

저의 풀이 이외에 위와 같이 최대 파이프 길이의 Boolean 리스트를 만들고 물이 새는 파이프 위치에 True 값을 입력해주고, 해당하는 위치가 True이면 테이프 1개 추가 후 바로 테이프 길이만큼 더한 값의 위치로 이동하여 해결하는 방식을 볼 수 있었습니다. 위 풀이는 물이 새는 모든 파이프 지점을 반드시 확인하지 않아도 된다는 장점이 있었습니다.🐤🐤🐤

감사합니다.

profile
https://github.com/min731

0개의 댓글