아직 계정이 없으신가요? 회원가입

Dev. Talk

[4차 통근버스 문제] 파이썬으로 풀면 맞고 c++로 풀면 틀립니다

회원사진kosy1782
81 views2023-03-07 15:18

도대체 파이썬 코드랑 c++ 코드 어느 부분이 달라서 c++만 틀리는 걸까요..

import sys
input = sys.stdin.readline

n = int(input())
bus = list(map(int, input().split()))
arr = [[0 for i in range(n + 1)] for j in range(n + 1)]

for j in range(n - 1, -1, -1):
    for x in range(1, n + 1):
        if bus[j] < x:
            arr[x][j] = arr[x][j + 1] + 1
        else:
            arr[x][j] = arr[x][j + 1]

ans = 0
for i in range(n):
    for j in range(i, n):
        if bus[i] < bus[j]:
            ans += arr[bus[i]][j]

print(ans)



#include <iostream>
#include <vector>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N;
	cin >> N;

	int* bus = new int[N];
	for(int i=0; i<N; i++){
		cin >> bus[i];
	}

	// arr[x][j] := j번째보다 오른쪽에 있는 숫자들 중, x보다 값이 작은 것들의 개수
	vector<vector<int>> arr(N+1, vector<int>(N+1, 0));

	for(int j=N-1; j>=0; j--){ // N-1부터 거꾸로 해야함; N인 경우는 0
		for(int x=1; x<=N; x++){
			if(bus[j] < x){ // j번째 버스가 x보다 작으면
				arr[x][j] = arr[x][j+1] + 1; // j번째보다 오른쪽에 있는 숫자들 중 x보다 값이 작은 것들의 개수가 증가한다.
			} else { // j번째 버스가 x보다 크거나 같으면
				arr[x][j] = arr[x][j+1]; // j번째보다 오른쪽에 있는 숫자들 중 x보다 값이 작은 것들의 개수가 증가하지 않는다.
			}
		}
	}

	int answer = 0;
	for(int i=0; i<N; i++){
		for(int j=i; j<N; j++){ // j는 i보다 커야함
			if(bus[i] < bus[j]){ // a_i < a_j를 만족할 경우에만
				answer += arr[bus[i]][j]; // j번째보다 오른쪽에 있는 숫자들 중에 bus[i]보다 값이 작은 것들의 개수
			}
		}
	}

	cout << answer;

	return 0;
}