티스토리 뷰
중간에 놓친 게 있다면 분무기가 [x - d, x + d] 영역에 물을 뿌릴 수 있을 때, x 지점에도 뿌릴 수 있다는 것을 빼먹고 있었다.
x 지점에도 물을 뿌릴 수 있다는 상황을 적용하고자 getMinSprayer()에서 for문이 d * 2에서 d * 2 + 1로 변경되었다.
import java.io.*;
import java.util.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
sb.append("#" + t + " " + getMinSprayer(d, list) + "\n");
}
System.out.println(sb);
}
static int getMinSprayer(int d, List<Integer> list) {
int removeIdx = list.size() - 1;
int sprayerCnt = 0;
while (!list.isEmpty()) {
int removeCnt = 0; // (d * 2 + 1)번 삭제될 때마다 분무기 1개 추가
for (int i = 0; i < d * 2 + 1; i++) {
if (removeIdx == -1) {
sprayerCnt++;
break;
}
list.remove(removeIdx--);
removeCnt++;
}
if (removeCnt == d * 2 + 1) {
sprayerCnt++;
}
}
return sprayerCnt;
}
}