[2026 하계 모각코 6주차] c++ 문법 학습

딤동희·2026년 7월 23일

2026 하계 모각코

목록 보기
6/6

알고리즘 문제풀이의 거의 최강자, cpp을 알아보도록 하겠다.

기본 문법 및 입출력

#include <iostream>
#include <string>

using namespace std;

int main () {

    string munjayeol;
    cin >> munjayeol; // 이렇게 입력 가능. 띄어쓰기나 엔터가 있을 때마다 하나의 변수에 들어감
    
    int jungsu;
    cin >> jungsu; // 입력하는 변수의 타입에 따라 자동으로 바꿔서 입력시켜줌. 보이는 것 처럼 정수 가능

    int num1, num2, num3;
    cin >> num1 >> num2 >> num3; // 이렇게 한 번에 여러개 입력 가능. 1 2 3 입력하면 변수에 차례대로 num1 = 1, num2 = 2... 이렇게 들어가는거임

    cout << "hello, world\n"; // 출력은 이렇게 하면 됨
    
    cout << num1 + num2 << "\n"; // 입력처럼 다른 타입 되고, 여러개 출력 됨. 
    
    return 0;
}

이렇게 입출력이 너무 간단한게 cpp의 매력 중 하나라고 생각한다.
저렇게 불러올 라이브러리? 적어서 쓸 수 있다.
main 함수 안에 코드 적어야 실행시킬때 돌아간다.

예제로 알아보는 나머지 문법

아래는 백준 30024번 문제를 cpp로 다시 풀어보았다. 정답인지는 모르겠으나 로직은 원래 짰던 코드랑 같아서 뭐 맞을 것이다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <utility>
#include <queue>
#define FASTIO ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

struct Corn {
    int y, x, value;
    Corn (int _y, int _x, int _value) {
        y = _y;
        x = _x;
        value = _value;
    }
    bool operator< (const Corn& other) const {
        return value < other.value;
    }
};

using namespace std;

int main () {
    FASTIO;

    int N, M;
    cin >> N >> M;

    vector<vector<int>> farm(N+1, vector<int>(M+1));
    priority_queue<Corn> pq;
    for (int y = 1; y <= N; y++) {
        for (int x = 1; x <= M; x++) {
            cin >> farm[y][x];
            if (y == 1 || y == N || x == 1 || x == M) {
                pq.push(Corn(y, x, farm[y][x]));
            }
        }
    }

    
    int K;
    cin >> K;
    int dy[4] = { -1, 1, 0, 0 }, dx[4] = { 0, 0, -1, 1 };
    vector<vector<bool>> visit(N+1, vector<bool>(M+1, false));
    

    for (int k = 0; k < K; k++) {
        Corn corn = pq.top(); pq.pop();
        if (visit[corn.y][corn.x]) {
            k -= 1;
            continue;
        }
        visit[corn.y][corn.x] = true;
        cout << corn.y << ' ' << corn.x << '\n';

        for (int d = 0; d < 4; d++) {
            int ny = corn.y + dy[d], nx = corn.x + dx[d];
            if (ny < 1 || N < ny || nx < 1 || M < nx) {
                continue;
            }
            if (visit[ny][nx]) {
                continue;
            }
            pq.push(Corn(ny, nx, farm[ny][nx]));
        }
    }


    return 0;
}

중요한거 몇개만 보겠다.

  • struct 얘는 java class? 라고 보면 된다. cpp안에 class가 따로 있긴 한데, 뭐 다를건 없다. bool operator< 함수를 오버라이딩해서, 객체의 우선순위를 직접 다룰 수도 있다. 위에 Corn 구조체 만들어서 operator 오버라이딩 한 후 우선순위큐에서 쓰는걸 볼 수 있는데, 이러면 value가 높은 corn 객체가 우선순위큐에서 먼저 나온다.
  • vector 얘는 java의 arraylist처럼 동적배열 라이브러리이다. push_back으로 배열 맨 뒤에 요소를 넣을 수도 있으며, 처음 객체를 만들 때 두번째 인자로 값을 넣으면 그 값으로 채워주기도 한다.
  • 반복문이랑 조건문은 보이는 것 처럼 그리 다를 것도 없이 간단하다.

나머지

여기까지만 봐도 웬만한 문제는 다 풀 수 있다. queue나 map 같은 라이브러리 쓰는 법은 매번 필요할때마다 인터넷에 검색해서 쓰다보면 정말 쉽게 익힐 수 있으니 걱정 말고 씩씩하게 도전해보길 바란다.

0개의 댓글