๐ŸŒฒ Altu-Bitu/๊ตฌํ˜„&์‹œ๋ฎฌ๋ ˆ์ด์…˜

[BOJ S2][C++] ๋ฐฑ์ค€ 18111๋ฒˆ: ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ

์„ ๋‹ฌ 2022. 11. 17. 19:12
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/18111

 

18111๋ฒˆ: ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ

ํŒ€ ๋ ˆ๋“œ์‹œํ”„ํŠธ๋Š” ๋Œ€ํšŒ ์ค€๋น„๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์ ธ์„œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒŒ์ž„์ธ ‘๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ’๋ฅผ ์ผฐ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋Š” 1 × 1 × 1(์„ธ๋กœ, ๊ฐ€๋กœ, ๋†’์ด) ํฌ๊ธฐ์˜ ๋ธ”๋ก๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ์„ธ๊ณ„์—์„œ ์ž์œ ๋กญ๊ฒŒ

www.acmicpc.net

 

๋ฌธ์ œ

ํŒ€ ๋ ˆ๋“œ์‹œํ”„ํŠธ๋Š” ๋Œ€ํšŒ ์ค€๋น„๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ง€๋ฃจํ•ด์ ธ์„œ ์ƒŒ๋“œ๋ฐ•์Šค ๊ฒŒ์ž„์ธ ‘๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ’๋ฅผ ์ผฐ๋‹ค. ๋งˆ์ธํฌ๋ž˜ํ”„ํŠธ๋Š” 1 × 1 × 1(์„ธ๋กœ, ๊ฐ€๋กœ, ๋†’์ด) ํฌ๊ธฐ์˜ ๋ธ”๋ก๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ 3์ฐจ์› ์„ธ๊ณ„์—์„œ ์ž์œ ๋กญ๊ฒŒ ๋•…์„ ํŒŒ๊ฑฐ๋‚˜ ์ง‘์„ ์ง€์„ ์ˆ˜ ์žˆ๋Š” ๊ฒŒ์ž„์ด๋‹ค.

๋ชฉ์žฌ๋ฅผ ์ถฉ๋ถ„ํžˆ ๋ชจ์€ lvalue๋Š” ์ง‘์„ ์ง“๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ๋ฅด์ง€ ์•Š์€ ๋•…์—๋Š” ์ง‘์„ ์ง€์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋•…์˜ ๋†’์ด๋ฅผ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ‘๋•… ๊ณ ๋ฅด๊ธฐ’ ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค.

lvalue๋Š” ์„ธ๋กœ N, ๊ฐ€๋กœ M ํฌ๊ธฐ์˜ ์ง‘ํ„ฐ๋ฅผ ๊ณจ๋ž๋‹ค. ์ง‘ํ„ฐ ๋งจ ์™ผ์ชฝ ์œ„์˜ ์ขŒํ‘œ๋Š” (0, 0)์ด๋‹ค. ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์€ ์ด ์ง‘ํ„ฐ ๋‚ด์˜ ๋•…์˜ ๋†’์ด๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ์ข…๋ฅ˜์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์ขŒํ‘œ (i, j)์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ธ”๋ก์„ ์ œ๊ฑฐํ•˜์—ฌ ์ธ๋ฒคํ† ๋ฆฌ์— ๋„ฃ๋Š”๋‹ค.
  2. ์ธ๋ฒคํ† ๋ฆฌ์—์„œ ๋ธ”๋ก ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์–ด ์ขŒํ‘œ (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;
}

/*
 */
๋ฐ˜์‘ํ˜•