[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ(C++)

2023. 5. 16. 15:32ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

https://school.programmers.co.kr/learn/courses/30/lessons/92344

๋‚ด ํ•ด๋‹ต

(1) ์ผ๋ฐ˜์ ์ธ for๋ฌธ ์‚ฌ์šฉ. ์Šคํ‚ฌ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋งˆ๋‹ค 2์ค‘ for๋ฌธ์„ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค.

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<vector<int>> skill) {
    int answer = 0;
    
    for(const auto& s : skill)
    {
        for(int r = s[1]; r <= s[3]; ++r)
            for(int c = s[2]; c <= s[4]; ++c)
            {
                int degree = s[0] == 1 ? -s[5] : s[5];
                board[r][c] += degree;
            }
    }
    
    for(int n = 0; n < board.size(); ++n)
        for(int m = 0; m < board[0].size(); ++m)
        {
            if(board[n][m] > 0)
                ++answer;
        }
    
    
    return answer;
}

 

(2) dp - ๋ˆ„์ ํ•ฉ ์‚ฌ์šฉ

 

๋ˆ„์ ํ•ฉ ๊ณผ์ •

1. ๋ˆ„์ ํ•ฉ์„ ์ €์žฅํ•  ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

2. ๋ˆ„์ ํ•ฉ์„ ์ ์šฉํ•  ์˜์—ญ์˜ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ๋”ํ•  ๊ฐ’(-d)์„ ๋„ฃ๋Š”๋‹ค.

3. ๋ˆ„์ ํ•ฉ ์˜์—ญ๋ฐ–์— ๋”ํ•  ๊ฐ’์„ ์ƒ์‡„ํ•  ๊ฐ’(+d)์„ ๋„ฃ๋Š”๋‹ค.

4. ๊ฐ€๋กœ-์„ธ๋กœ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•œ๋‹ค.

    4-1. ๊ฐ€๋กœ ๋ฐฉํ–ฅ ํ™•์žฅ(→)

    4-2. ์„ธ๋กœ ๋ฐฉํ–ฅ ํ™•์žฅ (↓)

5. ๋ˆ„์ ํ•ฉ ๋ฐฐ์—ด ์™„์„ฑ!

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<vector<int>> skill) {
    int answer = 0;
    vector<vector<int>> dg(board.size()+1, vector<int>(board[0].size()+1));
         
    for(const auto& s : skill)
    {
        int degree = s[0] == 1 ? -s[5] : s[5];
        
        // ๋ˆ„์ ํ•ฉ
        dg[s[1]][s[2]] += degree;
        
        // ๋ˆ„์ ํ•ฉ ์˜์—ญ ๋ฐ– ์ฒ˜๋ฆฌ
        dg[s[1]][s[4]+1] -= degree; // ๊ฐ€๋กœ ์˜์—ญ ๋ฐ–
        dg[s[3]+1][s[2]] -= degree; // ์„ธ๋กœ ์˜์—ญ ๋ฐ–
        dg[s[3]+1][s[4]+1] += degree; // ๊ฐ€๋กœx์„ธ๋กœ ์˜์—ญ ๋ฐ–
    }
    
    // ๋ˆ„์ ํ•ฉ ๊ฐ€๋กœ ๋ฐฉํ–ฅ ํ™•์žฅ
    for(int n = 0; n < dg.size(); ++n)
        for(int m = 1; m < dg[0].size(); ++m)
        {
            dg[n][m] += dg[n][m-1];
        }
    
    // ๋ˆ„์ ํ•ฉ ์„ธ๋กœ ๋ฐฉํ–ฅ ํ™•์žฅ
    for(int m = 0; m < dg[0].size(); ++m)
        for(int n = 1; n < dg.size(); ++n)
        {
            dg[n][m] += dg[n-1][m];
        }
    
    // ํŒŒ๊ดด๋˜์ง€ ์•Š๋Š” ๊ฑด๋ฌผ ์ฒดํฌ
    for(int n = 0; n < board.size(); ++n)
        for(int m = 0; m < board[0].size(); ++m)
        {
            if(board[n][m] + dg[n][m] > 0)
                ++answer;
        }
    
    return answer;
}
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'๐Ÿ–ฅ๏ธ Study Note > Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ๊ฒฝ์ฃผ๋กœ ๊ฑด์„ค(C++)  (1) 2023.05.19
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ์„ ์ž… ์„ ์ถœ ์Šค์ผ€์ค„๋ง (C++)  (0) 2023.05.18
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ(C++)  (0) 2023.05.15
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (C++)  (0) 2023.05.12
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์ž…๊ตญ์‹ฌ์‚ฌ(C++)  (0) 2023.05.11
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ๊ฒฝ์ฃผ๋กœ ๊ฑด์„ค(C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ์„ ์ž… ์„ ์ถœ ์Šค์ผ€์ค„๋ง (C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ๊ฐ€์žฅ ๋จผ ๋…ธ๋“œ(C++)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ์ง•๊ฒ€๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ (C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (141)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (135)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (6)
        • ์˜ค๋‹ต๋…ธํŠธ (2)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
Beankong_
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] level.3 - ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ(C++)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”