크기가 같은 두 개의 배열 X와 Y가 있다고 가정합니다. 첫 번째 날 i번째 인덱스에 X[i]개의 돌 더미가 있고 두 번째 날 i번째 인덱스에 Y[i]개의 돌이 있는 돌더미가 있습니다. 첫날 많은 회원님들이 오셨습니다. 그들은 아무 것도 하지 않거나 몇 개의 돌을 어떤 더미에 추가하거나 한 더미에서 다른 더미로 몇 개의 돌을 교환합니다. X에서 Y가 유효한지 여부를 확인해야 합니다.
따라서 입력이 X =[1, 2, 3, 4, 5]와 같으면; Y =[2, 1, 4, 3, 5]인 경우 출력은 True가 됩니다. 두 번째 더미에서 첫 번째 더미로 하나의 돌을 이동하고 네 번째 더미에서 세 번째 더미로 하나의 돌을 이동하기 때문입니다.
단계
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: s := s + A[i] for initialize i := 0, when i < n, update (increase i by 1), do: d := d + B[i] return (if d > s, then false, otherwise true)
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; bool solve(vector<int> A, vector<int> B){ int n = A.size(), d = 0, s = 0; for (int i = 0; i < n; i++) s += A[i]; for (int i = 0; i < n; i++) d += B[i]; return d > s ? false : true; } int main(){ vector<int> X = { 1, 2, 3, 4, 5 }; vector<int> Y = { 2, 1, 4, 3, 5 }; cout << solve(X, Y) << endl; }
입력
{ 1, 2, 3, 4, 5 }, { 2, 1, 4, 3, 5 }
출력
1