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

 

1449번: 수리공 항승

첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나

www.acmicpc.net


풀이 과정


그냥 풀게 되면 소수점 처리가 조금 난해하므로, 10을 곱해주어 정수로 풀이하는게 더 좋음.

  1. 파이프를 오름차순으로 정렬한다.
  2. 맨 왼쪽 파이프부터 순차적으로 파이프에 테이프를 붙인다.
    1. 현재 파이프 위치 - 5~ 현재 파이프 위치 + 5에 테이프가 붙어져있는지 확인
      • 확인할 때, set에 해당 위치가 있는지 확인하는 방식으로 진행
    2. 전체가 붙어져있다면 다음 파이프 위치로 넘어간다.
    3. 전체가 붙여져있지 않다면 안붙여진 부분중 가장 왼쪽 위치에다가 테이프를 붙여주어야 한다.
      • 테이프를 붙여줄 때, 붙이는 위치~붙이는 위치 + 10 * L를 Set에 넣어준다.
      • 테이프를 붙인 다음, 테이프 카운트를 하나 늘려준다.
  3. 붙인 테이프 개수를 출력한다.

소스 코드


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

+ Recent posts