문제
1차원 수직선 위에 정원이 있다. 모든 정수 1 ≤ i ≤ N 에 대해, 좌표 i에 꽃이 하나씩 심겨 있다. 즉, 좌표 1, 2, …, N에 총 N개의 꽃이 심겨 있다.
꽃에 물을 주기 위해 자동 분무기를 사용한다. 분무기는 정수 좌표에 놓을 수 있으며, 좌표 x에 분무기를 놓았을 경우 닫힌 구간 [x - D, x + D]에 심긴 모든 꽃들에 물을 줄 수 있다.
N과 D가 주어질 때, 모든 꽃이 한 개 이상의 분무기에서 물을 받을 수 있도록 하기 위해 필요한 최소한의 분무기 수를 구하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 하나의 줄로 이루어진다. 각 줄에는 두 개의 정수 N과 D (1 ≤ N, D ≤ 100) 가 공백 하나를 사이로 두고 주어진다.
[출력]
각 테스트 케이스마다 모든 꽃이 한 개 이상의 분무기에서 물을 받을 수 있도록 하기 위해 필요한 최소한의 분무기 수를 출력한다.
문제 풀이
분무기 하나 당 물을 줄 수 있는 범위를 구하고, 물을 주어야하는 전체 범위에서 분무기 하나 당 범위를 나누어 필요한 최소한의 분무기 수를 구한다.
분무기로 물을 줄 수 있는 범위는 [x-D, x+D] 이라고 했으니, "[...D개], x, [...D개]" 와 같으므로 2*D+1 이다.
또한, 분무기 수는 소수점을 가질 수 없고 오직 정수여야만 하므로, 꼭 올림 처리를 해줘야 한다.
작성 코드
import sys
import math
sys.stdin = open('input.txt', 'r')
T = int(input())
for test_case in range(1, T+1):
N, D = map(int, input().split())
d = D * 2 + 1 # 분무기 하나당 물을 줄 수 있는 범위
result = math.ceil(N / d)
print(f'#{test_case} {result}')
알게된 점
파이썬에서 올림 내림은 내장함수가 아니다. 반올림(round)만 내장함수이다.
따라서 ceil, floor를 사용하려면 꼭 math를 임포트 시켜줘야 한다.
'Problem Solving' 카테고리의 다른 글
[SWEA] D2 - 1974. 스도쿠 검증 in 파이썬 (0) | 2022.05.27 |
---|---|
[SWEA] D3 - 13428. 숫자 조작 in 파이썬 (0) | 2022.05.24 |
[SWEA] D3 - 13547. 팔씨름 in 파이썬 (0) | 2022.05.22 |
[SWEA] D3 - 13229. 일요일 in 파이썬 (0) | 2022.05.22 |
[JS 알고리즘] Toy 7 - treeDFS (0) | 2022.05.20 |