16235๋ฒˆ ๋ฌธ์ œ์˜ ์‹œ๊ฐ„ ์ค„์ด๊ธฐ

2024. 9. 26. 11:06ยท์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์œผ๋ฉด์„œ ๋ด„, ์—ฌ๋ฆ„, ๊ฐ€์„, ๊ฒจ์šธ์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ๊ตฌํ˜„ ์ž์ฒด๋Š” ์‰ฝ๋‹ค.

 

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์–ด๋ ค์šด ์ ์€ 0.3์ดˆ๋ผ๋Š” ์‹œ๊ฐ„์ œํ•œ์„ ๋šซ๊ธฐ์œ„ํ•ด ์–ด๋–ป๊ฒŒ๋“  ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ์— ์ด๋Ÿฌํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋„์›€๋„ ๋ ๊ฒธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์ฐพ์€ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค.

 

์ฒ˜์Œ์— ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ–ˆ๋‹ค.

for (int year = 0; year < k; year++) {

    if (trees.isEmpty()) break;

    trees.sort(new Comparator<tree>() {
        @Override
        public int compare(tree o1, tree o2) {
            return o1.old - o2.old;
        }
    });
    
    // spring
    ArrayDeque<tree> stk = new ArrayDeque<>();
    for (tree t : trees) {

        if (map[t.y][t.x] >= t.old) {
            map[t.y][t.x] -= t.old;
            t.old++;
        } else stk.push(t);
    }

    // summer
    while (!stk.isEmpty()) {
        tree t = stk.pop();
        trees.remove(t);

        map[t.y][t.x] += (t.old / 2);
    }

    // autumn
	ArrayList<tree> tmp = new ArrayList<>();
    int size = trees.size();
    for (int i = 0; i < size; i++) {
        tree t = trees.get(i);
        if (t.old % 5 == 0) {
            for (int d = 0; d < 8; d++) {
                int ny = t.y + dy[d];
                int nx = t.x + dx[d];
                if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
                tmp.add(new tree(ny, nx, 1));
            }
        }
    }
	trees.addAll(tmp);

    for (int y = 0; y < n; y++) {
        for (int x = 0; x < n; x++) {
            map[y][x] += A[y][x];
        }
    }
}

 

์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉด, ๋ด„, ์—ฌ๋ฆ„, ๊ฐ€์„, ๊ฒจ์šธ์„ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•˜์˜€๊ณ  ์ด๋ฅผ year๊ฐ€ 0๋ถ€ํ„ฐ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ฐ์‹ธ ๋ชจ๋“  ๋กœ์ง์ด ์ˆ˜ํ–‰ํ•˜๋ฉด 1๋…„์ด ์ง€๋‚˜๋„๋ก ํ•˜์˜€๋‹ค.

 

๋ด„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, ๋ด„์—์„œ๋Š” ๋‚˜๋ฌด์˜ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ์ž์‹ ์˜ ๋‚˜์ด๋งŒํผ ์–‘๋ถ„์„ ๋จน๊ณ , ๋‚˜์ด๊ฐ€ 1 ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ์–‘๋ถ„์ด ๋ถ€์กฑํ•ด์„œ ์ฃฝ๋Š”๋‹ค. ์ด๋•Œ, ์—ฌ๋Ÿฌ ๋‚˜๋ฌด๊ฐ€ ํ•œ ์ขŒํ‘œ์— ์žˆ์œผ๋ฉด ๋‚˜์ด๊ฐ€ ์–ด๋ฆฐ ๋‚˜๋ฌด๋ถ€ํ„ฐ ์–‘๋ถ„์„ ๋จน๋Š” ์กฐ๊ฑด์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๋‚˜๋ฌด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•ด์ฃผ์—ˆ๋‹ค. ๋˜, ์ฃฝ์€ ๋‚˜๋ฌด๋Š” ์—ฌ๋ฆ„์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— ์Šคํƒ์— ์ฃฝ์€ ๋‚˜๋ฌด๋“ค์„ ๋‹ด์•„์ค€๋‹ค.

 

์—ฌ๋ฆ„์—๋Š” ์Šคํƒ์— ๋‹ด์•„๋‘์—ˆ๋˜ ์ฃฝ์€ ๋‚˜๋ฌด๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๋‚˜๋ฌด ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋‚˜๋ฌด๋“ค์„ ์ง€์šฐ๊ณ , ๋‚˜์ด / 2๋งŒํผ์„ map์— ๋”ํ•ด์ค€๋‹ค.

 

๊ฐ€์„์—๋Š” tmp๋ผ๋Š” ์ƒˆ๋กญ๊ฒŒ ์ž๋ผ๋‚˜๋Š” ๋‚˜๋ฌด๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด์„ ์„ ์–ธํ•ด์ฃผ๊ณ , ๋‚˜๋ฌด ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ 5์˜ ๋ฐฐ์ˆ˜์ด๋ฉด 8๋ฐฉํ–ฅ์˜ ์ขŒํ‘œ์— ๋‚˜๋ฌด๋“ค์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ๋ชจ๋“  ๋‚˜๋ฌด๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด ๋’ค์— tress.addAll(tmp);๋กœ ์ƒˆ๋กญ๊ฒŒ ์ž๋ผ๋‚˜๋Š” ๋‚˜๋ฌด๋“ค์„ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

๊ฒจ์šธ์—๋Š” ๋‹จ์ˆœํžˆ ๋ชจ๋“  ๋งต์—๋‹ค A ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๊ฐ๊ฐ ๋”ํ•ด์ค€๋‹ค.

 

๋”ฑ๋ณด์•„๋„ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜์—ฌ ์ƒ๋‹นํžˆ ๋น„ํšจ์œจ์ ์ธ ์‹คํ–‰์„ ๋ณด์—ฌ์ค€๋‹ค. ๋‹น์—ฐํ•˜๊ฒŒ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ๊ทธ๋Ÿผ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด์ž. ์ผ๋‹จ, ๋ฌธ์ œ์˜ ๋ด„, ์—ฌ๋ฆ„, ๊ฐ€์„, ๊ฒจ์šธ ๋‚ด์šฉ์„ ํ•œ๋ฒˆ๋ณด์ž.

 

๋ด„์—๋Š” ๋‚˜๋ฌด๊ฐ€ ์–‘๋ถ„์„ ๋จน๊ณ  ๋‚˜์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๋ฉฐ, ์—ฌ๋ฆ„์—๋Š” ์ฃฝ์€ ๋‚˜๋ฌด๋“ค์˜ ์–‘๋ถ„์ด ๋งต์— ๋”ํ•ด์ง„๋‹ค. ๊ฐ€์„์—๋Š” ๋ฒˆ์‹๋งŒ ํ•œ๋‹ค. ๊ฒจ์šธ์—๋Š” ๋งต์— ์–‘๋ถ„๋“ค์ด ๋”ํ•ด์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ๋ณด๋ฉด ๋งต์„ ๊ธฐ์ค€์œผ๋กœ ๋ด„์—๋Š” ์–‘๋ถ„์ด ์ค„์–ด๋“ค๊ณ , ์—ฌ๋ฆ„๊ณผ ๊ฒจ์šธ์—๋Š” ์–‘๋ถ„์ด ์ฆ๊ฐ€ํ•˜๋ฉฐ ๊ฐ€์„์—๋Š” ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿผ ๋ด„ ์ดํ›„์— ์—ฌ๋ฆ„๊ณผ ๊ฒจ์šธ์„ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ฐ€์„์€ ์–ด๋–ค ๊ฒฝ์šฐ์— ์ง„ํ–‰๋˜์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†์ง€ ์•Š์„๊นŒ?

 

์ด๋Ÿฌํ•œ ์ƒ๊ฐ์„ ๊ฐ–๊ณ  ํ•œ๋ฒˆ ์ ‘๊ทผํ•ด๋ณด์ž. ์ผ๋‹จ ์—ฌ๋ฆ„๊ณผ ๊ฒจ์šธ์„ ํ•˜๋‚˜์˜ ๋กœ์ง์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ž. ๊ฒจ์šธ๋ถ€ํ„ฐ๋ณด๋ฉด ๊ฒจ์šธ์—๋Š” ๋ฌด์กฐ๊ฑด S2D2๊ฐ€ ๋ชจ๋“  ๋•…์„ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ์–‘๋ถ„์„ ๋”ํ•ด์•ผํ•˜๋‹ˆ๊นŒ ์›์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋” ์ค„์ผ ์ˆ˜๋Š” ์—†์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿผ ์—ฌ๋ฆ„์„ ์ค„์—ฌ์•ผํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์—ฌ๋ฆ„๋„ ๊ฒจ์šธ๊ณผ ๋™์ผํ•˜๊ฒŒ n * n ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฃฝ์€ ๋‚˜๋ฌด ์ขŒํ‘œ๋งˆ๋‹ค old / 2๋ฅผ ๋”ํ•ด๋‘๊ณ ใ…กํ•˜๋‚˜์˜ ์ขŒํ‘œ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‚˜๋ฌด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‚˜๋ฌด๊ฐ€ ์ฃฝ์—ˆ์„ ๊ฒฝ์šฐ๋ฅผ ์œ„ํ•ด ๋”ํ•˜๊ธฐ๋ฅผ ํ•œ๋‹ค.ใ…ก, ๊ฒจ์šธ๊ณผ ๊ฐ™์ด map์—๋‹ค๊ฐ€ ๋”ํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

 

์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

// dies๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”
...
// ์ฃฝ์€ ๋‚˜๋ฌด๋ฅผ ์ฐพ๋Š” ๋กœ์ง
dies[y][x] += (old / 2);
...

// ์—ฌ๋ฆ„๊ณผ ๊ฒจ์šธ์„ ๋™์‹œ์— ์ง„ํ–‰
for (int y = 0; y < n; y++) {
	for (int x = 0; x < n; x++) {
		map[y][x] += A[y][x] + dies[y][x];
		dies[y][x] = 0; // 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค˜์•ผ ๋‹ค์Œ ๋…„๋„์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์Œ
	}
}

 

 

์ฃฝ์€ ๋‚˜๋ฌด๋ฅผ ์ฐพ๋Š” ๋กœ์ง์€ ๊ฒฐ๊ตญ ๋ด„์—์„œ ํ•ด์•ผํ•˜๋ฏ€๋กœ ๋ด„์ด ์ง„ํ–‰ํ•˜๋ฉฐ map[t.y][t.x] < t.old๋ฉด dies[t.y][t.x] += (t.old / 2)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๊ฐ’๋“ค ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ๋ด„์„ ํ•œ๋ฒˆ ๋ฐ”๊พธ์–ด๋ณด์ž.

trees.sort(new Comparator<tree>() {
    @Override
    public int compare(tree o1, tree o2) {
        return o1.old - o2.old;
    }
});

ArrayDeque<tree> stk = new ArrayDeque<>();
for (tree t : trees) {

    if (map[t.y][t.x] >= t.old) {
        map[t.y][t.x] -= t.old;
        t.old++;
    } else stk.push(t);
}

 

์ผ๋‹จ ์Šคํƒ์€ ์ด์ œ ํ•„์š”๊ฐ€ ์—†๋‹ค. ์—ฌ๋ฆ„ ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๊ฒจ์šธ๊ณผ ํ•ฉ์ณค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ฌด ๋ฆฌ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋‚˜๋ฌด๋“ค์„ ์ง€์šธ ์ˆ˜ ์žˆ์„๊นŒ? ์ด๋Š” ๊ฒ€์ƒ‰์„ ํ†ตํ•ด์„œ ์•Œ์•˜๋Š”๋ฐ Iterator๋ฅผ ํ†ตํ•˜๋ฉด iter.remove()๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์›์†Œ๋ฅผ ์›๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๋ฉด ๋Œ€์ถฉ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

trees.sort(new Comparator<tree>() {
    @Override
    public int compare(tree o1, tree o2) {
        return o1.old - o2.old;
    }
});

Iterator iter = trees.iterator();
while (iter.hasNext()) {
	tree t = (tree)iter.next();

    if (map[t.y][t.x] >= t.old) {
        map[t.y][t.x] -= t.old;
        t.old++;
    } else {
		dies[t.y][t.x] += (t.old / 2);
		iter.remove();
	}
}

 

๊ทผ๋ฐ Iterator๋Š” ArrayList๋ณด๋‹ค LinkedList์—์„œ ๋” ํšจ์œจ์ ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ , ์‚ญ์ œ ๊ณผ์ •์—์„œ iter๋ฅผ ํ†ตํ•ด remove๋ฅผ ํ•˜๋ฉด ArrayList๋Š” ๋’ค์— ์žˆ๋Š” ๋‚˜๋ฌด๋“ค์„ ์•ž์œผ๋กœ ๋‹น๊ธฐ๋Š” ์‹œํ”„ํŠธ ์ž‘์—…์„ ํ•ด์•ผํ•ด์„œ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ƒ๊ธฐ์ง€๋งŒ LinkedList๋Š” ๋ฆฌ์ŠคํŠธ ์—ฐ๊ฒฐ ๋ฐ ์‚ญ์ œ๋งŒ ํ•ด์ฃผ๋ฉด ๋˜๋ฏ€๋กœ O(1)์ด๋‹ค. LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ํƒ€๋‹นํ•œ ๊ฒƒ์ด๋‹ค. ๋ด„์€ ์ด์ •๋„๋กœ๋งŒ ํ•˜๊ณ  ๊ฐ€์„์„ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด์ž.

 

๊ฐ€์„์€ ๋‚˜๋ฌด๊ฐ€ ๋ฒˆ์‹ํ•œ๋‹ค. ๋ด„์„ ์ง„ํ–‰ํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋ฒˆ์‹์„ ํ•˜๋ฉด ๋ ๊นŒ? ๊ทธ๊ฒƒ๋ณด๋‹ค๋Š” ๋ด„์ด ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‚˜๋ฌด๊ฐ€ ๋‚˜์ด๋ฅผ ๋จน์—ˆ๋‹ค๋ฉด, ๊ฑ”๋ฅผ ๋ฐ”๋กœ ๋ฒˆ์‹์‹œํ‚ค๋ฉด ๋”๋”์šฑ ๋กœ์ง์˜ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์‹œ๊ฐ„์„ ์ค„์—ฌ๋ณด์ž.

 

๋ด„์—์„œ ๋‚˜์ด๋ฅผ ๋จน๋Š” ์ƒํ™ฉ์€ if (map[t.y][t.x] >= t.old) ์ด ๋ถ„๊ธฐ๋ฌธ ์ดํ›„์ด๋‹ค. ๊ทธ๋Ÿผ ํ•ด๋‹น ๋ถ„๊ธฐ๋ฌธ์— ๋‚˜์ด๋ฅผ ๋จน๊ณ , ๋ฐ”๋กœ ๊ฐ€์„์—์„œ์˜ ๋ฒˆ์‹์„ ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

trees.sort(new Comparator<tree>() {
    @Override
    public int compare(tree o1, tree o2) {
        return o1.old - o2.old;
    }
});

LinkedList<tree> tmp = new LinkedList<>();
Iterator iterator = trees.iterator();
while (iterator.hasNext()) {
    tree t = (tree) iterator.next();

    // ์–‘๋ถ„์„ ๋จน๊ณ  ๋‚˜์ด ์ฆ๊ฐ€ -> ๋ฒˆ์‹
    if (map[t.y][t.x] >= t.old) {
        map[t.y][t.x] -= t.old;
        t.old++;

        if (t.old % 5 == 0) {
            for (int d = 0; d < 8; d++) {
                 int ny = t.y + dy[d];
                 int nx = t.x + dx[d];
                 if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
                 tmp.add(new tree(ny, nx, 1));
             }
         }
    } else {
        dies[t.y][t.x] += t.old/2;
        iterator.remove();
    }
}

trees.addAll(tmp);

 

๋งˆ์ง€๋ง‰์œผ๋กœ addAll์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ์• ์ดˆ์— ์ž๋ผ๋‚˜๋Š” ๋‚˜๋ฌด๋“ค์„ ๋ฌด์กฐ๊ฑด 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•˜๋ฉด ์ •๋ ฌํ•  ํ•„์š”์—†์ด ๋ฌด์กฐ๊ฑด ์–ด๋ฆฐ ๋‚˜์ด์˜ ๋‚˜๋ฌด๋“ค์ด ์•ž์— ์žˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿผ ์ตœ์ข…์ ์œผ๋กœ ๋ด„๊ณผ ๊ฐ€์„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

LinkedList<tree> tmp = new LinkedList<>();
Iterator iterator = trees.iterator();
while (iterator.hasNext()) {
    tree t = (tree) iterator.next();

    // ์–‘๋ถ„์„ ๋จน๊ณ  ๋‚˜์ด ์ฆ๊ฐ€ -> ๋ฒˆ์‹
    if (map[t.y][t.x] >= t.old) {
        map[t.y][t.x] -= t.old;
        t.old++;

        if (t.old % 5 == 0) {
            for (int d = 0; d < 8; d++) {
                 int ny = t.y + dy[d];
                 int nx = t.x + dx[d];
                 if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
                 tmp.add(new tree(ny, nx, 1));
             }
         }
    } else {
        dies[t.y][t.x] += t.old/2;
        iterator.remove();
    }
}

trees.addAll(0, tmp);

 

 

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class Main {

    static int n, m, k;
    static int[][] map;
    static int[][] dies;
    static int[][] A;

    static LinkedList<tree> trees = new LinkedList<>();

    static int[] dy = {-1, -1, -1, 0, 0, 1, 1, 1};
    static int[] dx = {-1, 0, 1, -1, 1, -1, 0, 1};

    static class tree {
        int x, y, old;

        tree(int y, int x, int old) {
            this.y = y;
            this.x = x;
            this.old = old;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        k = Integer.parseInt(st.nextToken());

        map = new int[n][n];
        dies = new int[n][n];
        A = new int[n][n];

        for (int y = 0; y < n; y++) {
            st = new StringTokenizer(br.readLine());
            for (int x = 0; x < n; x++) {
                map[y][x] = 5;
                A[y][x] = Integer.parseInt(st.nextToken());
            }
        }

        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());

            int y = Integer.parseInt(st.nextToken());
            int x = Integer.parseInt(st.nextToken());
            int old = Integer.parseInt(st.nextToken());

            trees.add(new tree(y-1, x-1, old));
        }

		// ์ดˆ๊ธฐ์—๋Š” ๋‚˜๋ฌด์˜ ๋‚˜์ด๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์ฃผ์–ด์ง€๋ฏ€๋กœ ํ•œ๋ฒˆ์˜ ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค.
        trees.sort(new Comparator<tree>() {
            @Override
            public int compare(tree o1, tree o2) {
                return o1.old - o2.old;
            }
        });

        for (int year = 0; year < k; year++) {

			if (trees.isEmpty()) break;

            // ๋ด„ ๊ฐ€์„
            LinkedList<tree> tmp = new LinkedList<>();
            Iterator iterator = trees.iterator();
            while (iterator.hasNext()) {
                tree t = (tree) iterator.next();

                // ์–‘๋ถ„์„ ๋จน๊ณ  ๋‚˜์ด ์ฆ๊ฐ€ -> ๋ฒˆ์‹
                if (map[t.y][t.x] >= t.old) {
                    map[t.y][t.x] -= t.old;
                    t.old++;

                    if (t.old % 5 == 0) {
                        for (int d = 0; d < 8; d++) {
                            int ny = t.y + dy[d];
                            int nx = t.x + dx[d];
                            if (ny < 0 || nx < 0 || ny >= n || nx >= n) continue;
                            tmp.add(new tree(ny, nx, 1));
                        }
                    }
                } else {
                    dies[t.y][t.x] += t.old/2;
                    iterator.remove();
                }
            }

            trees.addAll(0, tmp);

            // ์—ฌ๋ฆ„, ๊ฒจ์šธ
            for (int y = 0; y < n; y++) {
                for (int x = 0; x < n; x++) {
                    map[y][x] += dies[y][x] + A[y][x];
                    dies[y][x] = 0;
                }
            }
        }

        System.out.println(trees.size());
    }
}

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2025.01.17
ํŽœ์œ…ํŠธ๋ฆฌ  (4) 2024.10.03
1513 ๋ฌธ์ œ์—์„œ ์™œ 4์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜?  (2) 2024.09.25
2293 - ๋™์ „ 1  (1) 2024.09.23
2294๋ฒˆ ๋ฌธ์ œ ๋ฉ”๋ชจ  (0) 2024.09.22
'์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํŽœ์œ…ํŠธ๋ฆฌ
  • 1513 ๋ฌธ์ œ์—์„œ ์™œ 4์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜?
  • 2293 - ๋™์ „ 1
์œจ๋ฌด;
์œจ๋ฌด;
  • ์œจ๋ฌด;
    ๐ŸฅŠ
    ์œจ๋ฌด;
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (65)
      • ๊ฐœ๋ฐœ (30)
        • ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค (13)
        • ์šด์˜์ฒด์ œ (12)
      • ๊ฐœ๋ฐœ์„œ์  (2)
        • ์ž๋ฐ”-์Šคํ”„๋ง ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ (28)
      • ๊ฒŒ์ž„๊ฐœ๋ฐœ (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    2048(Hard)
    ์ด๊ฒƒ์ดC++์ด๋‹ค
    ์ธ๋””๊ฒŒ์ž„
    C++
    ๊ฐœ๋ฐœ
    2048
    ์ด๋™์ƒ์„ฑ์ž
    ์…€๋ฃฐ๋Ÿฌ์˜คํ† ๋งˆํƒ€
    ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค
    ๊ฒŒ์ž„
    ๋ฐฑ์ค€
    ์ฝ”๋”ฉ
    bsp
    ์šฐํ…Œ์ฝ”
    dfs
    ์ž๋ฐ”
    ํŒŒ์ด์ฌ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    python
    ์ ˆ์ฐจ์ ์ƒ์„ฑ
    ๋กœ๊ทธ๋ผ์ดํฌ
    ๊ฒŒ์ž„๊ฐœ๋ฐœ
    ๋กœ๊ทธ
    BFS
    ๊ฐœ๋ฐœ์—ฐ์Šต
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์œจ๋ฌด;
16235๋ฒˆ ๋ฌธ์ œ์˜ ์‹œ๊ฐ„ ์ค„์ด๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”