모각코

[모각코] 2024 동계 모각코 04회차

귤파는 감자 2024. 1. 30. 19:28

일시 및 장소

- 2024년 1월 30일 화요일 19시 00분 ~ 22시 00분 (3시간)
- discord 팀 채널

 

목표

1. 코드트리 시뮬레이션1 - 신기한 타일 뒤집기
2. 코드트리 DP1 - 피보나치수
3. 코드트리 DP1 - 계단오르기
4. 코드트리 DP1 - 사각형채우기

#include <iostream>
#include <vector>
#define MAX 100000

using namespace std;

int main() {
    int n, ptr = MAX;
    cin >> n;
    vector<int> v(MAX * 2 + 1);

    while (n > 0) {
        int a;
        char b;
        cin >> a >> b;
        if (b == 'R') {
            while(a--) {
                v.at(ptr) = 1;
                if (a) ptr++;
            }
        } else if (b == 'L') {
            while(a--) {
                v.at(ptr) = 2;
                if (a) ptr--;
            }
        }
        n--;
    }

    int r_cnt = 0, l_cnt = 0;
    for (int i = 0; i < v.size(); i++) {
        if (v.at(i) == 1) r_cnt++;
        else if (v.at(i) == 2) l_cnt++;
    }

    cout << l_cnt << ' ' << r_cnt;

    return 0;
}

 

#include <iostream>
#define MAX 45

using namespace std;

int main() {
    int n;
    int dp[MAX] = {};

    cin >> n;

    dp[1] = 1;
    dp[2] = 1;

    for (int i = 3; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }

    cout << dp[n];

    return 0;
}
#include <iostream>
#define MAX 46

using namespace std;

int memo[MAX] = {};

int Fibo(int n) {
    if (memo[n] != -1) return memo[n]; // 이미 n번째 값을 구해본 적이 있다면 memo에 있는 값 반환
    if (n <= 2) memo[n] = 1;
    else memo[n] = Fibo(n-1) + Fibo(n-2);
    return memo[n];
}

int main() {
    fill_n(memo, MAX, -1);

    int n;
    cin >> n;

    cout << Fibo(n);

    return 0;
}

 

#include <iostream>
#define MAX 1001

using namespace std;

int main() {
    int dp[MAX] = {0,};
    int n;
    cin >> n;

    dp[0] = 1;
    dp[2] = 1;
    dp[3] = 1;

    for (int i = 4; i <= n; i++) {
        dp[i] = (dp[i - 2] + dp[i - 3]) % 10007;
    }

    cout << dp[n];

    return 0;
}

#include <iostream>
#define MAX 1001

using namespace std;

int main() {
    int n;
    cin >> n;

    int dp[MAX] = {0,};

    dp[0] = 0;
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 3;

    for (int i = 4; i <= n; i++) {
        dp[i] = (dp[i-2] + dp[i-1]) % 10007;
    }

    cout << dp[n];

    return 0;
}

느낀점

시뮬레이션 문제는 예상 소요시간보다 훨씬 쉽게 풀었던 반면, dp문제는 쉬운 문제여도 해결하는데 한참 걸렸다.
평소에는 쉬운 문제 몇개는 건너뛰고 푸는 편인데, dp문제는 아직 해결법이 잘 떠오르지 않아서 기초 문제부터 풀었다.
이해가 잘 가지 않아서 dp문제는 모두 풀어보아야 할것같다.