코딩 테스트 준비

박재하·2023년 10월 19일
0

코딩 테스트

목록 보기
1/1

코딩 테스트 준비

230928

맥, VSCode 환경에서 bits/stdc++.h include하기

/Library/Developer/CommandLineTools/usr/include 등등 블로그에서 찾아본 대로 넣어도 라이브러리 path가 다른지 안먹히더라.

결국 학습메모 1 보고 /usr/local/include에다 추가해줬더니 잘 되었다. 나도 이사람처럼 homebrew로 gcc 설치했었나보다.

스크린샷 2023-09-28 오후 7 22 03

근데 이것저것 해도 몇몇 헤더파일이 없는지 에러가 나서, 꼭 필요한 C++로 주석처리된 부분까지만 남기고 다 지웠다. (정확히는 C++14까지)

// C++
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <codecvt>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif

#if __cplusplus >= 201402L
#include <shared_mutex>
#endif

잘 되나 테스트.

#include <bits/stdc++.h>
using namespace std;

int main() {
    vector<int> vec(10, 1);
    vector<int>::iterator iter;
    cout << "test\n" << vec[5] << "\n";

    int cnt=0;
    for (auto i: vec) {
        cnt++;
        vec[i] = cnt;
        cout << vec[i] << " ";
    }
}
스크린샷 2023-09-28 오후 7 39 09

bits/stdc++만 불러와도 iostream, vector 이런게 잘 불러와짐을 확인할 수 있었다.

BFS, DFS

학습메모 3, 4를 참고해서 2차원 배열 BFS, DFS를 맛봤다.

BFS

#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second

int board[502][502] = {
    {1,1,1,0,1,0,0,0,0,0}, 
    {1,0,0,0,1,0,0,0,0,0}, 
    {1,1,1,0,1,0,0,0,0,0}, 
    {1,1,0,0,1,0,0,0,0,0}, 
    {0,1,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0},
 }; // 1이 파란 칸, 0이 빨간 칸에 대응
bool vis[502][502];
int n = 7, m = 10;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    queue<pair<int, int>> Q;
    vis[0][0] = 1;
    Q.push({0, 0});

    cout << "====== [BFS] ======\n";
    for (int i=0; i<7; i++) { // 출력
        for (int j=0; j<10; j++) {
            cout << board[i][j] << " ";
        }
        cout << "\n";
    }

    while(!Q.empty()) {
        pair<int, int> cur = Q.front(); Q.pop();
        cout << "(" << cur.X << ", " << cur.Y << ") \n -> ";
        for (int dir = 0; dir < 4; dir++) {
            int nx = cur.X + dx[dir];
            int ny = cur.Y + dy[dir];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
            if (vis[nx][ny] || board[nx][ny] != 1) continue;
            vis[nx][ny] = 1;
            Q.push({nx, ny});
        }
    }
}

DFS

#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second

int board[502][502] = {
    {1,1,1,0,1,0,0,0,0,0}, 
    {1,0,0,0,1,0,0,0,0,0}, 
    {1,1,1,0,1,0,0,0,0,0}, 
    {1,1,0,0,1,0,0,0,0,0}, 
    {0,1,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0}, 
    {0,0,0,0,0,0,0,0,0,0},
 }; // 1이 파란 칸, 0이 빨간 칸에 대응
bool vis[502][502];
int n = 7, m = 10;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    stack<pair<int, int>> S;
    vis[0][0] = 1;
    S.push({0, 0});

    cout << "====== [DFS] ======\n";
    for (int i=0; i<7; i++) { // 출력
        for (int j=0; j<10; j++) {
            cout << board[i][j] << " ";
        }
        cout << "\n";
    }

    while(!S.empty()) {
        pair<int, int> cur = S.top(); S.pop();
        cout << "(" << cur.X << ", " << cur.Y << ") \n -> ";
        for (int dir = 0; dir < 4; dir++) {
            int nx = cur.X + dx[dir];
            int ny = cur.Y + dy[dir];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
            if (vis[nx][ny] || board[nx][ny] != 1) continue;
            vis[nx][ny] = 1;
            S.push({nx, ny});
        }
    }
}

스크린샷 2023-09-28 오후 8 07 38 스크린샷 2023-09-28 오후 8 07 45

잘 됨!

학습메모

  1. 맥에서 bits/stdc++.h 사용하기
  2. stdc++.h 코드(github)
  3. 2차월 배열 BFS
  4. 2차원 배열 DFS
profile
해커 출신 개발자

0개의 댓글