ํฌ์ŠคํŠธ

๐ŸŒ“ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ CPP

๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ

๐Ÿ’Ž ์ฒซ ๋ฒˆ์งธ ํ’€์ด


  • ์ฝ”๋“œ ์˜๋„ : ๋ถ„๋ฅ˜๋Š” ํž™์ธ๋ฐ.. ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.,
  • ๊ฒฐ๊ณผ : ์ •ํ™•์„ฑ 100์  (20/20), ์ด 100์ 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(vector<int> v1, vector<int> v2)
{
	if (v1[1] == v2[1])
		return v1[0] < v2[0];

	return v1[1] < v2[1];
}

int solution(vector<vector<int>> jobs)
{
	sort(jobs.begin(), jobs.end(), compare);

	bool* completed = new bool[jobs.size()];
	for (int i = 0; i < jobs.size(); i++)
		completed[i] = false;

	int lastCompletedTime = 0;
	int sumOfElapsedTime = 0;

	for (int i = 0; i < jobs.size(); i++)
	{
		int curProcessIndex = -1;
		int earliestReqTime = 1001;
		int earliestReqIndex = -1;

		// ๋‹ค์Œ ์ž‘์—…์„ ์ฐพ๋Š”๋‹ค.
		// ๋งŒ์•ฝ ๋‹น์žฅ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ์—†๋Š” ๊ฒฝ์šฐ, ๋‚จ์€ ์ž‘์—… ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ์š”์ฒญ๋œ ์ž‘์—…์„ ์ฐพ๋Š”๋‹ค.
		for (int ji = 0; ji < jobs.size(); ji++)
		{
			if (completed[ji])
				continue;

			if (jobs[ji][0] < earliestReqTime)
			{
				earliestReqTime = jobs[ji][0];
				earliestReqIndex = ji;
			}

			if (jobs[ji][0] > lastCompletedTime)
				continue;

			completed[ji] = true;

			curProcessIndex = ji;
			break;
		}

		if (curProcessIndex != -1)
		{
			sumOfElapsedTime += jobs[curProcessIndex][1] + (lastCompletedTime - jobs[curProcessIndex][0]);
			lastCompletedTime += jobs[curProcessIndex][1];
		}
		else
		{
			int breakTime = earliestReqTime - lastCompletedTime;
			completed[earliestReqIndex] = true;

			sumOfElapsedTime += jobs[earliestReqIndex][1] + earliestReqTime - jobs[earliestReqIndex][0];
			lastCompletedTime += jobs[earliestReqIndex][1] + breakTime;
		}
	}

	delete[] completed;
	return sumOfElapsedTime / jobs.size();
}

์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ํž™์„ ๋ฐฐ์šฐ๊ธด ํ–ˆ์—ˆ์ง€๋งŒ..
์–ด๋–ป๊ฒŒ ์“ธ์ง€๋ฅผ ๋ชฐ๋ผ ๊ทธ๋ƒฅ ๋ฌด์ž‘์ • ํ’€์—ˆ๋‹ค.

์—ญ์‹œ ๋‚˜ ์Šค์Šค๋กœ๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค.

๐Ÿ’Ž ์ตœ์ข… ํ’€์ด


  • ์ฝ”๋“œ ์˜๋„ : ์ข‹์•„๋ณด์ด๋Š” ํ’€์ด๋ฅผ ๋ณด๊ณ  ๋ฐฐ๋ผ์ž, (Priority Queue, Template, Iterator)
  • ๊ฒฐ๊ณผ : ์ •ํ™•์„ฑ 100์  (20/20), ์ด 100์ 
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <string>
#include <vector>
#include <algorithm>
#include <queue>

using namespace std;

struct CompareProcessTime
{
	bool operator()(const vector<int>& v1, const vector<int>& v2)
	{
		// ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํฐ ๊ฒƒ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—,
		// ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ
		return v1[1] > v2[1];
	}
};

struct CompareReqTime
{
	bool operator()(const vector<int>& v1, const vector<int>& v2)
	{
		return v1[0] < v2[0];
	}
};

int solution(vector<vector<int>> jobs)
{
	priority_queue<vector<int>, vector<vector<int>>, CompareProcessTime> pq;

	sort(jobs.begin(), jobs.end(), CompareReqTime());
	auto it = jobs.begin();

	int sumOfElapsedTime = 0;
	int curTime = jobs[0][0];

	while ((it != jobs.end()) || !pq.empty())
	{
		while ((it != jobs.end()) && ((*it)[0] <= curTime))
		{
			pq.push((*it));
			it++;
		}

		if (!pq.empty())
		{
			curTime += pq.top()[1];
			sumOfElapsedTime += (curTime - pq.top()[0]);
			pq.pop();
		}
		else
		{
			curTime = (*it)[0];
		}
	}

	return sumOfElapsedTime / jobs.size();
}

๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ค๊ฐ€, ์ œ์ผ ๊น”๋”ํ•ด๋ณด์ด๋Š” ์ฝ”๋“œ๊ฐ€ ์ด๊ฑฐ์˜€๋‹ค.
CPP์˜ Priority Queue, Template, Iterator๋ฅผ ์ด๋ฒˆ์— ๋ฐฐ์› ๋‹ค.

Priority Queue๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ธฐ์—,
์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๋Š” Compare ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ฆฌํ„ด์„ ๋ฐ˜๋Œ€๋กœ ์ค˜์•ผํ–ˆ๋‹ค.
์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ๊ฒƒ์— true๋ฅผ ๋ฆฌํ„ดํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

Compare ๊ตฌ์กฐ์ฒด๋„ ์‚ฌ์‹ค ์ด๋ฒˆ์— ์•Œ์•˜๋‹ค.
๊ธฐ์กด์—๋Š” ์ฒซ ๋ฒˆ์งธ ํ’€์ด์ฒ˜๋Ÿผ Compare ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ์—ˆ์—ˆ๋Š”๋ฐ,
๊ด„ํ˜ธ ์—ฐ์‚ฐ์ž๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋Š” ์ด๋ฒˆ์— ์ฒ˜์Œ ์จ๋ณด์•˜๋‹ค.

Template์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์—์„œ ๊ณต๋ถ€ํ–ˆ๋‹ค.
๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์ด ์ฃ„๋‹ค ์žˆ์–ด์„œ ์œ ์ตํ–ˆ๋‹ค.

Iterator๋Š” C#๋ž‘ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ,
์‚ฌ์‹ค C#์—์„œ๋„ ๋ณ„๋กœ ์จ๋ณธ์ ์ด ์—†์–ด์„œ.. ใ…Žใ…Ž..
๋” ๊ณต๋ถ€ํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

Container Adapter? ๋ผ๋Š” ๊ฒƒ๋„ ์ž˜ ์™€๋‹ฟ์ง€์•Š๋Š”๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค..

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.