https://www.acmicpc.net/problem/18111
๋ฌธ์
ํ ๋ ๋์ํํธ๋ ๋ํ ์ค๋น๋ฅผ ํ๋ค๊ฐ ์ง๋ฃจํด์ ธ์ ์๋๋ฐ์ค ๊ฒ์์ธ ‘๋ง์ธํฌ๋ํํธ’๋ฅผ ์ผฐ๋ค. ๋ง์ธํฌ๋ํํธ๋ 1 × 1 × 1(์ธ๋ก, ๊ฐ๋ก, ๋์ด) ํฌ๊ธฐ์ ๋ธ๋ก๋ค๋ก ์ด๋ฃจ์ด์ง 3์ฐจ์ ์ธ๊ณ์์ ์์ ๋กญ๊ฒ ๋ ์ ํ๊ฑฐ๋ ์ง์ ์ง์ ์ ์๋ ๊ฒ์์ด๋ค.
๋ชฉ์ฌ๋ฅผ ์ถฉ๋ถํ ๋ชจ์ lvalue๋ ์ง์ ์ง๊ธฐ๋ก ํ์๋ค. ํ์ง๋ง ๊ณ ๋ฅด์ง ์์ ๋ ์๋ ์ง์ ์ง์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์ ๋์ด๋ฅผ ๋ชจ๋ ๋์ผํ๊ฒ ๋ง๋๋ ‘๋ ๊ณ ๋ฅด๊ธฐ’ ์์ ์ ํด์ผ ํ๋ค.
lvalue๋ ์ธ๋ก N, ๊ฐ๋ก M ํฌ๊ธฐ์ ์งํฐ๋ฅผ ๊ณจ๋๋ค. ์งํฐ ๋งจ ์ผ์ชฝ ์์ ์ขํ๋ (0, 0)์ด๋ค. ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ด ์งํฐ ๋ด์ ๋ ์ ๋์ด๋ฅผ ์ผ์ ํ๊ฒ ๋ฐ๊พธ๋ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ ์ข ๋ฅ์ ์์ ์ ํ ์ ์๋ค.
- ์ขํ (i, j)์ ๊ฐ์ฅ ์์ ์๋ ๋ธ๋ก์ ์ ๊ฑฐํ์ฌ ์ธ๋ฒคํ ๋ฆฌ์ ๋ฃ๋๋ค.
- ์ธ๋ฒคํ ๋ฆฌ์์ ๋ธ๋ก ํ๋๋ฅผ ๊บผ๋ด์ด ์ขํ (i, j)์ ๊ฐ์ฅ ์์ ์๋ ๋ธ๋ก ์์ ๋๋๋ค.
1๋ฒ ์์ ์ 2์ด๊ฐ ๊ฑธ๋ฆฌ๋ฉฐ, 2๋ฒ ์์ ์ 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. ๋ฐค์๋ ๋ฌด์์ด ๋ชฌ์คํฐ๋ค์ด ๋์ค๊ธฐ ๋๋ฌธ์ ์ต๋ํ ๋นจ๋ฆฌ ๋ ๊ณ ๋ฅด๊ธฐ ์์ ์ ๋ง์ณ์ผ ํ๋ค. ‘๋ ๊ณ ๋ฅด๊ธฐ’ ์์ ์ ๊ฑธ๋ฆฌ๋ ์ต์ ์๊ฐ๊ณผ ๊ทธ ๊ฒฝ์ฐ ๋ ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์์ค.
๋จ, ์งํฐ ์๋์ ๋๊ตด ๋ฑ ๋น ๊ณต๊ฐ์ ์กด์ฌํ์ง ์์ผ๋ฉฐ, ์งํฐ ๋ฐ๊นฅ์์ ๋ธ๋ก์ ๊ฐ์ ธ์ฌ ์ ์๋ค. ๋ํ, ์์ ์ ์์ํ ๋ ์ธ๋ฒคํ ๋ฆฌ์๋ B๊ฐ์ ๋ธ๋ก์ด ๋ค์ด ์๋ค. ๋ ์ ๋์ด๋ 256๋ธ๋ก์ ์ด๊ณผํ ์ ์์ผ๋ฉฐ, ์์๊ฐ ๋ ์ ์๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M, B๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ M, N ≤ 500, 0 ≤ B ≤ 6.4 × 107)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฐ๊ฐ M๊ฐ์ ์ ์๋ก ๋ ์ ๋์ด๊ฐ ์ฃผ์ด์ง๋ค. (i + 2)๋ฒ์งธ ์ค์ (j + 1)๋ฒ์งธ ์๋ ์ขํ (i, j)์์์ ๋ ์ ๋์ด๋ฅผ ๋ํ๋ธ๋ค. ๋ ์ ๋์ด๋ 256๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์ ๋๋ 0์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ๊ณ ๋ฅด๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์์ค. ๋ต์ด ์ฌ๋ฌ ๊ฐ ์๋ค๋ฉด ๊ทธ์ค์์ ๋ ์ ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ์ถ๋ ฅํ์์ค.
ํ์ด
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ค ๋์๋ ์๊ฐ ๊ทธ๋ฆฌ ํฌ์ง ์์ผ๋ฏ๋ก ๋ธ๋ฃจํธํฌ์ค ๋ชจ๋ ๋์ด์ ๊ฒฝ์ฐ๋ฅผ ์กฐ์ฌํด๋ณธ๋ค
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int,int> ci;
const int INF = 150000000; // 500*500*256*2 = 128000000
ci solution(int n, int m, int b, vector<vector<int>>&land) {
ci ans = {INF, 0}; // ๋ต ์ = { ๊ฑธ๋ฆฌ๋ ์ต์์๊ฐ, ๋
๋์ด }
for(int height=0; height<=256; height++) {
int inventory=b, required_time=0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
int diff = land[i][j] - height;
if(diff>0) {
// ์์์ผ๊ฒฝ์ฐ: ๋ธ๋ญ์ ์ ๊ฑฐํ์ฌ ์ธ๋ฒคํ ๋ฆฌ์ ๋ฃ๋๋ค (2์ด)
required_time += 2*diff;
} else {
// ์์์ผ๊ฒฝ์ฐ: ๋ธ๋ญ์ ๊บผ๋ด์ ์์ ๋๋๋ค (1์ด)
required_time += 1*-diff;
}
inventory += diff;
}
}
if(inventory>=0 && ans.first>=required_time) {
ans = {required_time, height};
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n, m, b;
cin >> n >> m >> b;
vector<vector<int>> land (n, vector<int>(m,0));
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin >> land[i][j];
ci ans = solution(n, m, b, land);
cout << ans.first << " " << ans.second;
return 0;
}
/*
*/
'๐ฒ Altu-Bitu > ๊ตฌํ&์๋ฎฌ๋ ์ด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S2][C++] ๋ฐฑ์ค 3085๋ฒ: ์ฌํ ๊ฒ์ (0) | 2022.11.07 |
---|---|
[BOJ S4][C++] ๋ฐฑ์ค 1244๋ฒ: ์ค์์น ์ผ๊ณ ๋๊ธฐ (0) | 2022.10.17 |
[BOJ S3][C++] ๋ฐฑ์ค 2503๋ฒ: ์ซ์ ์ผ๊ตฌ (2%, 4%) (0) | 2022.10.06 |
[BOJ G5][C++] ๋ฐฑ์ค 20055๋ฒ: ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด (0) | 2022.10.03 |
[BOJ S1][C++] ๋ฐฑ์ค 20923๋ฒ: ์ซ์ ํ ๋ฆฌ๊ฐ๋ฆฌ ๊ฒ์ (0) | 2022.09.30 |