๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๐Ÿ‘จ‍๐Ÿ’ปํ’€์ด ๊ณผ์ •

 

์ฒ˜์Œ์—๋Š” DP๋กœ ๋ฌด์ ๊ถŒ ์Šคํ‚ฌ์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ์™€ ์•ˆ ํ–ˆ์„ ๊ฒฝ์šฐ์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜์—ฌ ํ’€์–ด๋‚˜๊ฐ€๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋ฌด์ ๊ถŒ ์Šคํ‚ฌ ๊ฐœ์ˆ˜(k)์™€ ๋ณ‘์‚ฌ๋“ค ์ˆ˜(n)๊ฐ€ ๊ฐ™์€ ๊ฒŒ ์•„๋‹ˆ๋ผ์„œ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜๊ฐ€ ์—†๋”๋ผ๊ตฌ์š”. ๊ทธ๋ž˜์„œ ์Šคํƒ(Stack)์„ ์ด์šฉํ•ด์„œ ํฐ ์ˆซ์ž๋ฅผ ๋ฌด์ ๊ถŒ ์Šคํ‚ฌ๋กœ ์Šคํ‚ตํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ ์—ญ์‹œ ์ตœ์ ์ด๋ผ๋Š” ๋ณด์žฅ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐฉ๋ฒ•์€ ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue, heap)์˜€๋„ค์š”. ์™œ ์ด ์ƒ๊ฐ์„ ๋ชป ํ–ˆ์„๊นŒ์š”. ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

  • ํ˜„์žฌ ๋ณ‘์‚ฌ ์ˆ˜(n)๊ฐ€ ํ˜„์žฌ ๋ผ์šด๋“œ์˜ ์ ์˜ ์ˆ˜(enemy[i])๋ณด๋‹ค ์ž‘๊ณ , ๋ฌด์ ๊ถŒ ์Šคํ‚ฌ ๊ฐœ์ˆ˜(k)๊ฐ€ 0๊ฐœ๋ผ๋ฉด ๋ฃจํ”„ ์ข…๋ฃŒ
    • ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด, enemy[i]๋ฅผ ์šฐ์„  ์ˆœ์œ„ ํ์— ๋„ฃ๊ณ , n -= enemy[i]๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.
    • ๋ผ์šด๋“œ๋„ +1 ํ•ด์ค๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ณ‘์‚ฌ ์ด์ƒ์œผ๋กœ ์‚ฌ์šฉ ํ–ˆ๋‹ค๋ฉด(n < 0), ์šฐ์„  ์ˆœ์œ„ ํ์—์„œ ํ•˜๋‚˜์”ฉ popํ•˜์—ฌ n์— ๋”ํ•ด์ค๋‹ˆ๋‹ค.
    • pop์„ ํ•  ๋•Œ๋งˆ๋‹ค k๋ฅผ 1๊ฐœ์”ฉ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.
    • k > 0์ด๊ณ , n >= 0์ด ๋˜์—ˆ๋‹ค๋ฉด ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒ
    • k == 0์ด๊ณ ,  n < 0์ด๋ผ๋ฉด ํ˜„์žฌ ๋ผ์šด๋“œ๋Š” ๋นผ๊ณ  ๋ฃจํ”„ ์ข…๋ฃŒ
  • ๋ชจ๋“  ๋ผ์šด๋“œ๋ฅผ ํด๋ฆฌ์–ดํ–ˆ๋‹ค๋ฉด enemy ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฆฌํ„ดํ•˜๊ณ , ์•„๋‹ˆ๋ผ๋ฉด ์นด์šดํŠธ ํ•œ ๋ผ์šด๋“œ ์ˆ˜ ๋ฆฌํ„ด

 

โœ๏ธ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

#include <vector>
#include <queue>
using namespace std;

int solution(int n, int k, vector<int> enemy) {
	int answer = 0;
	priority_queue<int> enemies;
	int i = 0;

	for (; i < enemy.size(); i++) {
		if (n < enemy[i] and k == 0)
			break;

		enemies.emplace(enemy[i]);
		n -= enemy[i];
		answer++;

		while (!enemies.empty() and n < 0) {
			if ((k == 0 and n < 0)) {
				answer--;
				break;
			}

			n += enemies.top();
			enemies.pop();
			k--;
		}
	}

	return i == enemy.size() ? enemy.size() : answer;
}

 

 

728x90
๋ฐ˜์‘ํ˜•