ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)

2023. 4. 17. 12:49ยท๐Ÿ–ฅ๏ธ Study Note/Coding Test

๋‚ด ํ’€์ด

  • ์ฃผ์–ด์ง„ ์‚ฌ๊ฐํ˜•๋“ค์˜ ๋‚ด๋ถ€์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์™ธ๊ณฝ์„ ์„ ๋”ฐ๋ผ DFS ํƒ์ƒ‰์„ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ‘์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์™ธ๊ณฝ์„ ’ ์ด๋ผ๋Š” ์กฐ๊ฑด์— ๋”ฐ๋ผ 1์”ฉ ์ด๋™ํ•˜๋ฉฐ ์™ธ๊ณฝ์„ ์„ ํƒ์ƒ‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์˜์—ญ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

  • ๋ฐ”๋กœ ๊ฐ„๊ฒฉ์ด 1์ด๋ฉด์„œ ์™ธ๊ณฝ์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์˜์—ญ์ด๋‹ค.
  • ์ด ์˜์—ญ์€ ์™ธ๊ณฝ์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜์ง€๋งŒ, ํ˜„์žฌ ์œ„์น˜์™€ ๊ฐ„๊ฒฉ์ด 1์ด๋ฉด์„œ ์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€์— ํฌํ•จ๋˜์ง€ ์•Š์€ ์™ธ๊ณฝ์„ ์ด๋ฏ€๋กœ ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ์กฐ๊ฑด์— ์ฐธ์ด ๋œ๋‹ค.
  • ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ขŒํ‘œ๊ฐ’์„ 2๋ฐฐ๋กœ ํ•œ ๋’ค 1์”ฉ ํƒ์ƒ‰ํ•˜์˜€๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›๋ณธ์—์„œ ์™ธ๊ณฝ์„ ์œผ๋กœ ์ด์–ด์ง€์ง€ ์•Š์€ ์ขŒํ‘œ๋ฅผ ๊ตฌ๋ณ„ํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋‚ด ํ•ด๋‹ต

#include <string>
#include <vector>
#include <stack>
#include <algorithm>
#include <iostream>

using namespace std;

int solution(vector<vector<int>> rectangle, int characterX, int characterY, int itemX, int itemY) {
    int answer = 0;
    vector<int> counters;
    stack<pair<int, int>>  s;
    vector<vector<bool>>   visit(101, vector<bool>(101, false));
    int dx[] = {1, 0, -1, 0};
    int dy[] = {0, 1, 0, -1};
    
    // ์‹œ์ž‘์  ์ž…๋ ฅ (์ขŒํ‘œ 2๋ฐฐ)
    s.push(make_pair(characterX * 2, characterY * 2));
    
    int count = -1;
    while(!s.empty())
    {
        int X = s.top().first;
        int Y = s.top().second;
        s.pop();
        
        // ์ด๋ฏธ ๋ฐฉ๋ฌธํ•œ์  ์žˆ์œผ๋ฉด ํƒ์ƒ‰ x
        if(visit[X][Y])
            continue;
        
        // ๋ฐฉ๋ฌธ ํšŸ์ˆ˜ ์ฆ๊ฐ€
        ++count;
        
        // ๋ชฉํ‘œ์ง€์ (์ขŒํ‘œ 2๋ฐฐ)์ด๋ผ๋ฉด ์นด์šดํŠธ ๋ชฉ๋ก์— ์ถ”๊ฐ€
        if(X == itemX * 2 && Y == itemY * 2)
        {
            counters.push_back(count);
            count = 0;
            continue;
        }
        
        // ๋ชฉํ‘œ์ง€์ ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ฐฉ๋ฌธ ์ฒดํฌ
        visit[X][Y] = true;

        
        // ๋‹ค์Œ ์œ„์น˜ ์ฐพ๊ธฐ
        for(int i = 0; i < 4; ++i)
        {
            int nX = X + dx[i];
            int nY = Y + dy[i];
            
            // ๋ฒ”์œ„ ๋ฐ–์ผ ๊ฒฝ์šฐ
            if(nX < 0 || nX > 100 || nY < 0 || nY > 100)
                continue;
            
            if(!visit[nX][nY])
            {
                bool isOutline = false;
                
                for(const auto& r : rectangle)
                {
                    // ์‚ฌ๊ฐํ˜• ์ขŒํ‘œ 2๋ฐฐ
                    int lbX = r[0] * 2;
                    int rtX = r[2] * 2;
                    int lbY = r[1] * 2;
                    int rtY = r[3] * 2;
                    
                    // ํ•œ ์ ์ด๋ผ๋„ ์‚ฌ๊ฐํ˜• ๋‚ด๋ถ€๋ผ๋ฉด ์™ธ๊ฐ์„ ์ด ์•„๋‹ˆ๋‹ค
                    if(nX > lbX && nY > lbY && nX < rtX && nY < rtY)
                    {
                        isOutline = false;
                        break;
                    }
                    
                    // ์™ธ๊ณฝ์„  ํ…Œ์ŠคํŠธ
                    // x์ถ•
                    if(nX == lbX || nX == rtX)
                    {
                        if(nY >= lbY && nY <= rtY)
                        {
                            isOutline = true;
                            continue;
                        }
                    }
                    // y์ถ•
                    if(nY == lbY || nY == rtY)
                    {
                        if(nX >= lbX && nX <= rtX)
                        {
                            isOutline = true;
                            continue;
                        }
                    }
                }
                
                // ์•„์›ƒ๋ผ์ธ ์œ„์— ์žˆ์„ ๊ฒฝ์šฐ
                if(isOutline)
                {
                    s.push(make_pair(nX, nY));
                }
            }
        }
    }
    
    answer = *min_element(counters.begin(), counters.end());
    answer /= 2;
    
    return answer;
}

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ตฌ๋ช…๋ณดํŠธ(C++)  (0) 2023.04.20
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ(C++)  (0) 2023.04.18
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)  (0) 2023.04.14
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)  (0) 2023.04.13
ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ฒŒ์ž„ ๋งต ์ตœ๋‹จ๊ฑฐ๋ฆฌ(C++)  (0) 2023.04.11
'๐Ÿ–ฅ๏ธ Study Note/Coding Test' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ๊ตฌ๋ช…๋ณดํŠธ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.2 / ํฐ ์ˆ˜ ๋งŒ๋“ค๊ธฐ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์—ฌํ–‰๊ฒฝ๋กœ(C++)
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ๋‹จ์–ด ๋ณ€ํ™˜(C++)
Beankong_
Beankong_
์ฃผ๋‹ˆ์–ด ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๊ณต๋ถ€ ๊ธฐ๋ก
  • Beankong_
    Beankong's Devlog
    Beankong_
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์ „์ฒด ๊ธ€ (146)
      • โ›… Daily (0)
      • ๐Ÿ–ฅ๏ธ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • ๐Ÿงญ Devlog (8)
        • ์˜ค๋‹ต๋…ธํŠธ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      ๊ฒŒ์ž„ ๋ชจ์ž‘
      unrealengine module
      cpp
      programmers
      OnlineSubsystem
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ๊ทธ๋ฆฌ๋””(greedy)
      ํ”„๋ฃŒ๊ทธ๋ž˜๋จธ์Šค
      UnrealEngine5
      propertyaccess
      UnrealEngine
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      ๊ฒŒ์ž„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ๊ฒŒ์ž„ ๊ฐœ๋ฐœ
      unrealengine build system
      ํ—ฌํ…Œ์ด์ปค
      ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ
      ๊ฒŒ์ž„ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
    Beankong_
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค / level.3 / ์•„์ดํ…œ ์ค๊ธฐ(C++)
    ์ƒ๋‹จ์œผ๋กœ

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