개발(Dev) 이야기/C++ , Python

    [C++] scanf 버퍼 오버플로우 오류 해결방법

    scanf는 안전하지 않은 일이 발생할 수도 있는 함수들 중 하나다. %d, %f와 같은 고정폭 변수만을 입력받아오는 경우엔 문제가 되지 않지만 %c, %s와 같은 문자 입력을 받을경우 "Buffer overflow"가 발생할 수 있는 배열 입력이다. 따라서 warning C4996 오류가 발생한다. Microsoft에선 이를 지양하기 위해 scanf_s를 사용하라고 권고한다. 그렇지만 C++에선 scanf_s는 표준 문법이 아니므로 이 에러를 해결해야 한다. 아래와 같이 코드를 추가하면 된다. #pragma warning(disable:4996) 또는 #define _CRT_SECURE_NO_WARNINGS를 전처리기 부분에 추가해주면 된다. #define _CRT_SECURE_NO_WARNINGS #..

    [C++] cin 대신 scanf 에서 정수 1자리씩 입력받는 방법

    #include ... scanf("%1d", &num) 위와 같이 선언해주면 된다. C++에선 정수가 띄어쓰기 없이 입력받을 때 cin으로 입력이 어렵다. 따라서 전처리기에 #include 를 써준 뒤 scanf 선언을 위와 같이 선언해주면 붙어있어도 한번에 한개씩 입력받을 수 있게 된다.

    [C++] STL Queue 사용법

    Queue는 우리가 자료구조에서 배웠던 자료형과 의미가 같다. 알고리즘에서 보통 BFS 에서 자주 사용한다. 따라서 전처리기에 queue를 선언해주면서 사용할 수 있다. #include ... int value=1; int x=0, y=0; // 초기 선언 queue q; queue q; // 값 삽입 q.push(value); q.push(make_pair(x,y)); // 값 삭제 q.pop(); //pair를 사용한 queue에서 값 호출 q.front().first; // x q.front().second; // y

    [C++] 동적으로 2차원 배열 할당하기 - vector편

    C++에서 동적으로 2차원 배열 할당하는 방법은 간단하다. vector matrix(n, vector (n)); 이 말은 vector 방 안에 value 값을 다시 vector로 생성하여 2차원화 해주는 것이다. #include #include using namespace std; int main() { int n; cin >> n; vector matrix(n, vector (n)); for (int i = 0; i > matrix[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout

    [C++] Vector에서 Unique, erase를 활용한 중복순열

    #include #include #include using namespace std; int main() { int n, m; cin >> n >> m;// 4 2 vector buf(n); for (int i = 0; i > buf[i];// 4 4 5 2 sort(buf.begin(), buf.end());// 2 4 4 5 buf.erase(unique(buf.begin(), buf.end()),buf.end()); // 2 4 5 cout

    [C++] pair, vector

    1. Pair first, second 두 개의 변수쌍을 저장할 수 있는 struct. 2차원 배열에서 index를 수행하거나 좌표평면의 좌표, Graph에서 정점과 정점 간의 최단거리를 묶어서 저장해야 하는 경우 자주 사용된다. 기본적으로 utility 헤더 파일 (#include)를 포함하며 다른 STL 컨테이너 들에 비해 비교적 간단한 구조이므로 멤버 함수가 적다. ... #include ... int main(){ int t, buf1, buf2; cin >> t; pair p; ... pair p1 = make_pair(1, 2); // 1, 2 ... vector v; for (int i = 0; i > buf1 >> buf2; v.push_back({buf1, b..

    [C++] 동적으로 2차원 배열 할당 및 해제하기

    C++에서 1차원 배열을 동적으로 할당해줄 때는 일반적으로 다음과 같이 선언을 한다. int n; cin >> n; int* cost = new int[n]; 2차원 배열 선언은 단순히 한줄코드로 선언할 수 있는 것이 아닌 for 반복문으로 설정해줘야 한다. 2차원 배열은 위와 같은 구조를 지닌다. 위 그림은 row_n이 4, col_n이 5에 해당하는 배열이다. 먼저, memset 함수 사용을 위해 헤더파일에 string.h 를 포함해준다. 단순히 2차원 배열선언이 목적이라면 아래와 같은 코드를 응용하면 된다. int row_n, col_n; cin >> row_n >> col_n; int** cost = new int*[col_n]; for(int i = 0; i < col_n; ++i) cost[i..

    [C++] 순열 정렬방법 (next_permutation, prev_permutation)

    본 포스팅은 Backjoon Online Judge의 "다음순열(10972), 이전순열(10973), 모든순열(10974), 차이를 최대로(10819)"를 함께 풀때 도움이 되는 글입니다. C++의 STL에선 순열을 정렬하는 함수 next_permutation, prev_permutation이 존재한다. 가령, 1 2 3 4 라는 4개의 숫자로 이루어진 순열을 입력받았다고 가정할때 do{ for(int i=0;i

    [C++] 기본입출력, 줄바꿈

    C++에서의 기본 입출력은 간단하다. //입력 cin >> num; //출력 cout