<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>zzephyr_.log</title>
        <link>https://velog.io/</link>
        <description>All About CSE</description>
        <lastBuildDate>Mon, 24 Aug 2026 08:34:45 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>zzephyr_.log</title>
            <url>https://velog.velcdn.com/images/zzephyr_/profile/21379b9a-c8d1-4055-898e-cbf9b528d8e1/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. zzephyr_.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/zzephyr_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[교차항의 합을 누적합으로 풀어내 O(N²)을 O(N)으로 계산하기]]></title>
            <link>https://velog.io/@zzephyr_/01</link>
            <guid>https://velog.io/@zzephyr_/01</guid>
            <pubDate>Mon, 24 Aug 2026 08:34:45 GMT</pubDate>
            <description><![CDATA[<h3 id="1-개요">1. 개요</h3>
<p>오늘 학교에서 갑자기 문득 든 생각이다.</p>
<blockquote>
<p>어떠한 수열의 제곱의 합은 계산하기 빡세니까, 수열의 합의 제곱으로 바꾸어 계산하는 법이 없을까?  </p>
</blockquote>
<p>노트에 즉시 식을 써내려갔다.</p>
<h3 id="2-5개-항으로-유도해보기">2. 5개 항으로 유도해보기</h3>
<p>$$(x_1+x_2+x_3+x_4+x_5)^2=(x_1+x_2+x_3+x_4+x_5)(x_1+x_2+x_3+x_4+x_5)$$
$$=x_1x_1+x_2x_2+x_3x_3+x_4x_4+x_5x_5+2(x_1x_2+x_1x_3+x_1x_4+x_1x_5+x_2x_3+x_2x_4+x_2x_5+x_3x_4+x_3x_5+x_4x_5)\$$
$$2(x_1x_2+x_1x_3+x_1x_4+x_1x_5+x_2x_3+x_2x_4+x_2x_5+x_3x_4+x_3x_5+x_4x_5)$$
$$=2{x_1(x_2+x_3+x_4+x_5)+x_2(x_3+x_4+x_5)+x_3(x_4+x_5)+x_4(x_5)}$$</p>
<blockquote>
<p>아 제곱의 합을 합의 제곱의 형태로 고치려면, 교차항의 합을 써야하구나. 어라? 이거 누적합이잖아.</p>
</blockquote>
<p>$$S_1 = x_1$$
$$S_2 = S_1 + x_2$$
$$S_3 = S_2 + x_3\\vdots$$
$$S_5 = S_4+x_5\$$
$$2{x_1(x_2+x_3+x_4+x_5)+x_2(x_3+x_4+x_5)+x_3(x_4+x_5)+x_4(x_5)}$$
$$=2{x_1(S_5-S_1)+x_2(S_5-S_2)+x_3(S_5-S_3)+x_4(S_5-S_4)}$$
$$=2\sum\limits_{k=1}^{4}{x_k(S_5-S_k)}$$</p>
<blockquote>
<p>이제 수식을 정리하여 완성해볼까?</p>
</blockquote>
<p>$$(x_1^2+x_2^2+x_3^2+x_4^2+x_5^2)=(x_1+x_2+x_3+x_4+x_5)^2-2\sum\limits_{k=1}^{4}{x_k(S_5-S_k)}$$</p>
<h3 id="3-일반화">3. 일반화</h3>
<p>$$X=(x_k)<em>{k=1}^n\quad n=|X|\$$
$$S_n = S</em>{n-1}+x_n$$
$$\sum\limits_{k=1}^n{x_k^2}=(\sum\limits_{k=1}^n{x_k})^2-2\sum\limits_{k=1}^{n-1}{x_k(S_n-S_k)}$$</p>
<h3 id="4-증명">4. 증명</h3>
<p>$$S_n-S_k=\sum\limits_{i=1}^{n}{x_i}-\sum\limits_{i=1}^{k}{x_i}=\sum\limits_{i=k+1}^{n}{x_i}\$$
$$\sum\limits_{k=1}^{n-1}{x_k(S_n-S_k)}=\sum\limits_{k=1}^{n-1}{x_k\cdot\sum\limits_{i=k+1}^{n}{x_i}}=\sum\limits_{1\le k&lt;i\le n}{x_kx_i}\$$
$$\sum\limits_{k=1}^{n}{x_k^2}=(\sum\limits_{k=1}^{n}{x_k})^2-2\sum\limits_{1\le k&lt;i\le n}{x_kx_i}$$
$$=(\sum\limits_{k=1}^{n}{x_k})^2-2\sum\limits_{k=1}^{n-1}{x_k(S_n-S_k)}\quad\text{Q.E.D.}$$</p>
<h3 id="5-코드-구현-및-검증">5. 코드 구현 및 검증</h3>
<p>파이썬</p>
<pre><code class="language-python">X = list(map(int, input().split(&quot; &quot;))); n = len(X)
S = [0] * n; S[0] = X[0]
for i in range(1, n): S[i] = S[i-1] + X[i]

a = sum(x**2 for x in X)
b = (S[n-1] ** 2) - (2 * sum( X[k] * (S[n-1] - S[k]) for k in range(n-1)))

print(f&quot;original : {a}&quot;)
print(f&quot;zephyr&#39;s method : {b}&quot;)</code></pre>
<p>C++</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

int main()
{
    int N;
    cin &gt;&gt; N;

    vector&lt;int&gt; X(N);
    for (int i = 0; i &lt; N; i++)
        cin &gt;&gt; X[i];

    vector&lt;int&gt; S(N); S[0] = X[0];
    for (int i = 1; i &lt; N; i++)
        S[i] = S[i - 1] + X[i];

    int a = 0, b = 0;
    for (int i = 0; i &lt; N; i++)
        a += X[i] * X[i];

    b = S[N - 1] * S[N - 1];
    for (int k = 0; k &lt; N - 1; k++)
        b -= 2 * X[k] * (S[N-1] - S[k]);

    cout &lt;&lt; &quot;original :&quot; &lt;&lt; a &lt;&lt; endl;
    cout &lt;&lt; &quot;zephyr&#39;s method :&quot; &lt;&lt; b;
}</code></pre>
<p>$\[0.5em]$</p>
<h3 id="6-마치며">6. 마치며</h3>
<p>학교에서 문득 든 생각으로 시작해서, 단순 수식 전개부터 누적합을 이용한 일반화 및 수학적 증명까지 완성해 보았다. 알고리즘 공부를 하며 배웠던 누적합이 여기서 쓰일 줄은 몰랐다. 내가 스스로 고민하여 도출해낸 첫 공식이라 뿌듯하다!</p>
]]></description>
        </item>
    </channel>
</rss>