티스토리 뷰

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

중간에 놓친 게 있다면 분무기가 [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;
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30