cclang   3년 전

c++, python 코드 두개 똑같이 짠 것 같은데

python은 같은문자를 여러개 넣으면 왜 이상한 답을 내놓는 것일까요? (ex input) aaa / aaaaa , ex output) 2)

python은 공부를 한지 얼마 안되서 제가 모르는 어떤 차이점이 있는 건가요?

c++ 코드

#include 
using namespace std;
#define FastFC ios_base::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL)

string A, B;
int ans_pos_a, ans_pos_b;
int dp[1050][1050];
int solve(int pos_a, int pos_b) {
    if (A.length() == pos_a)return 0;
    int& ret = dp[pos_a][pos_b];
    if (ret != -1)return ret;
    ret = solve(pos_a + 1, pos_b);
    for (int i = pos_b; i < B.length(); i++)
        if (A[pos_a] == B[i]) {
            ret = max(ret, 1 + solve(pos_a + 1, i + 1));
            break;
        }
    return ret;
}
int main() {
    FastFC;
    cin >> A >> B;
    memset(dp, -1, sizeof(dp));
    cout << solve(0, 0);
    return 0;
}

python 코드import sys

sys.setrecursionlimit(10 ** 6)


def solve(pos_a, pos_b):
    global len_a, len_b, A, B
    if len_a == pos_a:
        return 0
    if dp[pos_a][pos_b] != -1:
        return dp[pos_a][pos_b]
    dp[pos_a][pos_b] = solve(pos_a + 1, pos_b)
    for i in range(pos_b, len_b):
        if A[pos_a] == B[i]:
            dp[pos_a][pos_b] = max(dp[pos_a][pos_b], solve(pos_a + 1, i + 1) + 1)
    return dp[pos_a][pos_b]


A, B = input(), input()
len_a, len_b = len(A), len(B)
dp = [[-1] * (len_b + 1)] * (len_a + 1)
print(solve(0, 0))

아 무엇이 문제인지는 알았습니다.

그런데 왜

dp = [[-1] * (len_b + 1)] * (len_a + 1)
dp[0][0] = 1 

를 하면

dp[1][0]

...

dp[N][0] 도 1로 바뀌는 것인가요?

djm03178   3년 전

깊은 복사와 얕은 복사에 대해 알아보시면 좋을 것 같습니다.

wider93   3년 전

list a에 대해 

[a] * n과 [a for _ in range(n)]의 동작이 다릅니다. 어떻게 다른지가 위 답변이 말해주는 내용입니다.

cclang   3년 전

다들 감사합니다.

댓글을 작성하려면 로그인해야 합니다.