flowing1ife 2023. 3. 3. 16:01
  • 문제

μ•ˆν˜•μ°¬ κ΅μˆ˜λ‹˜μ€ μ•Œκ³ λ¦¬μ¦˜ 뢄석 기말고사λ₯Ό μ€€λΉ„ν•˜λ €κ³  ν•œλ‹€.

μ•Œκ³ λ¦¬μ¦˜ κΈ°λ§κ³ μ‚¬λŠ” 총 MλΆ„ λ™μ•ˆ μ‰¬λŠ” μ‹œκ°„ 없이 λ³Ό μ˜ˆμ •μ΄λ©°, 인원이 λ„ˆλ¬΄ λ§Žμ•„μ„œ 곡학관 C040ν˜Έμ—μ„œ 말고 λ‹€λ₯Έ κ°•μ˜μ‹€μ—μ„œ μ‹œν—˜μ„ 치λ₯Ό 수 μ—†κ²Œ λ˜μ—ˆλ‹€.

곡학관 C040ν˜ΈλŠ” 0λΆ„λΆ€ν„° SλΆ„κΉŒμ§€ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. SλŠ” 무쑰건 M μ΄μƒμ΄κΈ° λ•Œλ¬Έμ— μ•ˆ κ΅μˆ˜λ‹˜μ€ λ³„λ¬Έμ œ 없이 μ‹œν—˜μ„ 치λ₯Ό κ²ƒμœΌλ‘œ μƒκ°ν•˜μ˜€λ‹€. κ·ΈλŸ¬λ‚˜ 곡학과 C040ν˜Έμ—λŠ” λ‹€λ₯Έ μ‹œν—˜λ„ μ˜ˆμ •λ˜μ–΄ μžˆμ–΄μ„œ κ²ΉμΉ˜μ§€ μ•ŠλŠ” μ‹œκ°„μ„ μž‘μ•„μ•Ό ν•œλ‹€.

각 μ‹œν—˜μ€ xi뢄에 μ‹œμž‘ν•΄μ„œ yiλΆ„ λ™μ•ˆ μ§„ν–‰ν•˜λ©° μ„œλ‘œ κ²ΉμΉ˜μ§€ μ•ŠλŠ”λ‹€. ν•œ μ‹œν—˜μ΄ λλ‚œ 직후 λ‹€μŒ μ‹œν—˜μ΄ μžˆλŠ” κ²½μš°λ„ κ²ΉμΉ˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ νŒλ‹¨ν•œλ‹€. μ¦‰, xi + yi  xj μΌ λ•Œ i μ‹œν—˜κ³Ό j μ‹œν—˜μ€ μ„œλ‘œ κ²ΉμΉ˜μ§€ μ•ŠλŠ”λ‹€.

μ•ˆν˜•μ°¬ κ΅μˆ˜λ‹˜μ΄ μ‹œν—˜μ„ μ–Έμ œ 치λ₯Ό 수 μžˆλŠ”μ§€ κ΅¬ν•΄λ³΄μž.

  • μ½”λ“œ
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int availTime(vector<vector<int>>& arr, int n, int m, int s) {
	int t = -1;

	if (arr[0][0] != 0 && m <= arr[0][0]) {
		return 0;
	}

	for (int i = 0; i < n; i++) {
		if (i == n - 1) {
			if ((arr[n - 1][1] + m) <= s) {
				t = arr[n - 1][1];
			}
			break;
		}

		if (arr[i + 1][0] >= (arr[i][1] + m)) {
			t = arr[i][1];
			break;
		}

	}

	return t;
}

int main()
{
	int n, m, s;
	int x, y;


	//μž…λ ₯
	cin >> n >> m >> s;

	vector<vector<int>>arr(n, vector<int>(2, 0));




	for(int i = 0; i < n; i++) {

		//μ‹œν—˜ μ‹œκ°„ μž…λ ₯
		cin >> x >> y;
		arr[i][0] = x;
		arr[i][1] = x + y;
	}

	//x순으둜 μ •λ ¬ 
	sort(arr.begin(), arr.end());

	//μ—°μ‚°
	
	cout << availTime(arr, n, m, s);

}
  • ν•΄μ„€

1. availTime(vector<vector<int>>& arr, int n, int m, int s)

- μ‹œν—˜ κ°€λŠ₯ν•œ μ‹œκ°„μ„ μ—°μ‚°ν•˜λŠ” ν•¨μˆ˜

: μ‹œν—˜ κ°€λŠ₯ν•œ μ‹œκ°„μ„ ν‘œν˜„ν•˜λŠ” λ³€μˆ˜ tλ₯Ό -1둜 μ΄ˆκΈ°ν™”

: λ§Œμ•½ x1이 0이 μ•„λ‹ˆκ³  x1이 μ‹œν—˜ λ³΄λŠ” μ‹œκ°„μΈ m보닀 ν¬κ±°λ‚˜ κ°™λ‹€λ©΄, 즉 μ΄ˆλ°˜μ— μ‹œκ°„μ΄ λΉˆλ‹€λ©΄ 0을 return

: 쀑간에 μ‹œκ°„μ΄ λΉ„λŠ” 경우, for문을 톡해 n 번의 연산을 반볡

: λ§Œμ•½ iκ°€ n-1이라면 n-1λ²ˆμ§Έμ— ν•΄λ‹Ήν•˜λŠ” μ‹œν—˜μ˜ λλ‚˜λŠ” μ‹œκ°„μ— m을 λ”ν•œ 것이 μ‹œν—˜μž₯을 μ΅œμ’…μ μœΌλ‘œ μ“Έ 수 μžˆλŠ” μ‹œκ°„μΈ s보닀 μž‘κ±°λ‚˜ κ°™λ‹€λ©΄, 즉 맨 ν›„λ°˜μ— μ‹œκ°„μ΄ λΉˆλ‹€λ©΄ n-1λ²ˆμ§Έμ— ν•΄λ‹Ήν•˜λŠ” μ‹œν—˜μ˜ λλ‚˜λŠ” μ‹œκ°„μ„ return

: λ§Œμ•½ 그것이 μ•„λ‹ˆλΌλ©΄ iλ²ˆμ§Έμ— ν•΄λ‹Ήν•˜λŠ” μ‹œν—˜μ˜ λλ‚˜λŠ” μ‹œκ°„μ— m을 λ”ν•œ 것이 i+1λ²ˆμ§Έμ— ν•΄λ‹Ήν•˜λŠ” μ‹œν—˜μ˜ μ‹œμž‘ μ‹œκ°„λ³΄λ‹€ μž‘κ±°λ‚˜ κ°™λ‹€λ©΄ iλ²ˆμ§Έμ— ν•΄λ‹Ήν•˜λŠ” μ‹œν—˜μ˜ λλ‚˜λŠ” μ‹œκ°„μ„ return

 

2. main ν•¨μˆ˜

: n, m, sλ₯Ό 각각 μž…λ ₯ λ°›μŒ

: 각 μ‹œν—˜μ˜ μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ„ μ €μž₯ν•  2차원 벑터 arr μ„ μ–Έ

: for문을 톡해 x,yλ₯Ό μž…λ ₯ λ°›κ³  arr[i][0]μ—λŠ” x, arr[i][1]μ—λŠ” x+yλ₯Ό λŒ€μž…ν•΄ μ‹œν—˜μ˜ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ„ μ €μž₯

: sortν•¨μˆ˜λ₯Ό 톡해 arr[i][0]을 κΈ°μ€€μœΌλ‘œ arr의 μ›μ†Œλ₯Ό μ •λ ¬

: availTime ν•¨μˆ˜λ₯Ό 톡해 tλ₯Ό μ—°μ‚°ν•˜μ—¬ 좜λ ₯