Visual Studio 2022 그래픽스 디버깅

 

Visual Studio 에서 DirectX12 이전 버전에서는 결과를 디버깅해보려면 위의 디버깅을 진행하면 되었던걸로 기억하는데

DirectX12는 PIX라는 디버깅 툴을 사용하기를 권장한답니다.

 

1. 설치

https://devblogs.microsoft.com/pix/download/ 여기서 최근 버전 설치

실행하시면 위와같이 보일텐데, 지금까지 전 Attach 기능만 사용해봤습니다. Attach는 실행중인 프로그램에 연결할수있는겁니다. 그리고 꼭 For GPU Capture를 클릭해주셔야합니다. 안그럼 GPU 캡처가 안될겁니다.

 

2. 사용법

본인의 코드에 PIX 코드를 입력해야합니다

https://devblogs.microsoft.com/pix/taking-a-capture/ 여기 들어가보면, 위 처럼 나와있는데, C++17 버전 코드고, 그 이전버전 C++ 코드도 있으니, 본인의 C++ 버전에 맞게 추가하시면됩니다.

 

실행 코드(사이트에 있음)는 위와 같습니다. 저는 앱 초기화 할때 맨 처음에 실행해줍니다.

그리고 자신의 DirectX12 프로그램을 실행하고, 위 사진처럼 선택후, Attach를 하면

이렇게 캡처본이 뜹니다. 그러고 저 캡처본을 더블클릭하면

위처럼 명령 흐름을 알수있게되죠.

#include <iostream>
#include <utility>
#include <vector>
#include <queue>

using namespace std;

int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int n, m;
pair<int, int> s;
vector<pair<int, int>> g;
char maze[1001][1001];
bool visited[1001][1001];

int get_ghost_min_dist(int h, int w, vector<pair<int, int>>& ghost) {
    int dist = 2001;
    for (auto& g : ghost) {
        dist = min(dist, abs(h - g.first) + abs(w - g.second));
    }
    return dist;
}

bool bfs(pair<int, int> start, vector<pair<int, int>>& ghost) {
    queue<pair<pair<int, int>, int>> q;  // ((y, x), depth)
    q.push({start, 0});
    visited[start.first][start.second] = true;

    while (!q.empty()) {
        auto [pos, d] = q.front();
        int h = pos.first, w = pos.second;
        q.pop();

        if (maze[h][w] == 'D') {
            cout << "Yes" << endl;
            return true;
        }

        if (d >= get_ghost_min_dist(h, w, ghost)) {
            visited[h][w] = true;
            continue;
        }

        for (int i = 0; i < 4; i++) {
            int next_y = h + dy[i];
            int next_x = w + dx[i];
            if (next_y >= 0 && next_y < n && next_x >= 0 && next_x < m && !visited[next_y][next_x] && maze[next_y][next_x] != '#') {
                visited[next_y][next_x] = true;
                q.push({{next_y, next_x}, d + 1});
            }
        }
    }

    return false;
}

int main(int argc, char** argv) {
    cin >> n >> m;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> maze[i][j];
            visited[i][j] = false;
            if (maze[i][j] == 'N') {
                s = {i, j};
            }
            else if (maze[i][j] == 'G') {
                g.push_back({i, j});
            }
        }
    }

    if (!bfs(s, g)) {
        cout << "No" << endl;
    }

    return 0;
}

핵심은 bfs 돌면서
1. '지금 위치에서 유령들과의 거리의 최소값'
2. '시작위치에서 지금 위치까지의 거리'
를 비교해서 1이 더 작거나 같으면, 유령이 우리 남우씨를 잡게되니까 그 위치는 탐색중단합니다

'알고리즘' 카테고리의 다른 글

프로그래머스 - 주식 가격 (c++)  (0) 2025.02.23
프로그래머스 - 게임 맵 최단거리 (c++)  (0) 2025.02.23
Lv. 3 징검다리 - C++  (0) 2024.12.10
Lv. 3 함께하는 효도 - C++  (0) 2024.12.10
Lv. 3 자동차 테스트  (0) 2024.12.10
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char** argv)
{
    int n;
    cin >> n;

    vector<int> arr(n);
    vector<int> dp(n, 1);
    
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    int result = 1;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
           if (arr[i] < arr[j]) {
               dp[j] = max(dp[j], dp[i] + 1);
               result = max(result, dp[j]);
           }
        }
    }

    cout << result << endl;
    
    return 0;
}

시간 복잡도 : n^2
n이 3000이라 제곱이여도 가능

+ Recent posts