はまやんはまやんはまやん

hamayanhamayan's blog

3D Surface Area [HackerRank Week of Code 35 C]

https://www.hackerrank.com/contests/w35/challenges/3d-surface-area

縦H,横Wのエリアがあり、(i,j)には高さA[i][j]の箱が置いてある。
敷き詰めるように置いた時にできる図形の表面積を答えよ。

解説

まず、上と下の面積はどちらも、H*Wとなるので、これを足す。
あとは、側面積を足していく。
これは横との差の分だけ壁として面積になるので、差を足し合わせていけばいい。

int H, W, A[101][101];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> H >> W;
    rep(y, 0, H) rep(x, 0, W) cin >> A[y][x];

    int ans = H * W * 2;
    rep(y, 0, H) {
        int pre = 0;
        rep(x, 0, W) ans += abs(pre - A[y][x]), pre = A[y][x];
        ans += pre;
    }
    rep(x, 0, W) {
        int pre = 0;
        rep(y, 0, H) ans += abs(pre - A[y][x]), pre = A[y][x];
        ans += pre;
    }

    cout << ans << endl;
}