Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 숫자를 차이가 k인 두 부분으로 나누는 방법

이 튜토리얼에서는 하나의 숫자를 서로의 차이가 k가 되도록 두 부분으로 나누는 프로그램을 작성해 보겠습니다.

문제 이해하기

먼저 예시를 통해 문제를 살펴보겠습니다.

입력

n = 100
k = 30

출력

65 35

n = 100을 두 수로 나누었을 때 그 차이가 k = 30이 되도록 하는 것입니다. 실제로 65와 35의 합은 100이고, 차이는 정확히 30입니다.

수학적 접근 방식

본격적으로 문제를 해결하기 전에 약간의 수학적 사고가 필요합니다. 핵심 아이디어는 다음과 같습니다.

두 수를 각각 a와 b라고 하면 다음 두 식이 성립합니다.

  • a + b = n (두 수의 합)
  • a - b = k (두 수의 차이)

이 두 식을 더하면 다음과 같은 결과를 얻을 수 있습니다.

a = (n + k) / 2
b = n - a

즉, n과 k만 주어지면 위 공식을 통해 바로 답을 구할 수 있습니다. 생각보다 간단하죠?

C++ 구현 코드

이제 위 로직을 C++ 코드로 구현해 보겠습니다.

#include <bits/stdc++.h>
using namespace std;
void divideTheNumber(int n, int k) {
    double a = (n + k) / 2;
    double b = n - a;
    cout << a << " " << b << endl;
}
int main() {
    int n = 54, k = 12;
    divideTheNumber(n, k);
}

실행 결과

위 코드를 실행하면 다음과 같은 결과를 확인할 수 있습니다.

33 21

n = 54, k = 12일 때, 33과 21의 합은 54이고 차이는 정확히 12입니다. 공식이 올바르게 작동하는 것을 알 수 있습니다.

마무리

이처럼 간단한 연립방정식을 활용하면 복잡한 반복문 없이도 O(1) 시간 복잡도로 문제를 해결할 수 있습니다. 큰 수가 입력되더라도 동일한 공식을 적용하면 되므로, 오버플로우에 유의하여 자료형을 선택하면 됩니다.

튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.