๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 13423 : Three Dots (์ด์ง„ํƒ์ƒ‰) / ์‚ฝ์งˆ ๊ธฐ๋ก

https://www.acmicpc.net/problem/13423

๋ฌธ์ œ

์ง์„  ์œ„์— ์„œ๋กœ ๋‹ค๋ฅธ N๊ฐœ์˜ ์ ์ด ์ฐํ˜€ ์žˆ๋‹ค. ์  i์˜ ์œ„์น˜๋Š” Xi์ด๋‹ค. N๊ฐœ์˜ ์  ์ค‘ 3๊ฐœ๋ฅผ ๊ณจ๋ผ ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ์ ์„ a, ๊ฐ€์šด๋ฐ ์žˆ๋Š” ์ ์„ b, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ ์„ c๋ผ๊ณ  ํ•˜์ž. ๊ฐ๊ฐ์˜ ์ ์˜ ์œ„์น˜๋Š” Xa, Xb, Xc์ด๋‹ค. ์ด๋•Œ ์  a, b ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ์™€ ์  b, c์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์œผ๋ฉด ์„ธ ์ ์˜ ๊ฐ„๊ฒฉ์ด ๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค. ์ฆ‰, Xb - Xa = Xc – Xb์ผ ๋•Œ ์„ธ ์ ์˜ ๊ฐ„๊ฒฉ์ด ๊ฐ™๋‹ค. ๋‹ค์Œ์€ N = 5์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ด๋‹ค.

์œ„ ์˜ˆ์‹œ์—์„œ ์ ์˜ ์œ„์น˜๋Š” ๊ฐ๊ฐ -4, -1, 0, 2, 4์ด๋‹ค. ์ด์ค‘ -4, -1, 0์œ„์น˜์˜ ์„ธ ์ ์„ ๊ฐ๊ฐ a, b, c๋ผ๊ณ  ํ•˜๋ฉด Xb - Xa = 3, Xc – Xb = 1๋กœ ๊ฐ„๊ฒฉ์ด ๊ฐ™์ง€ ์•Š๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ -4, -1, 2 ์œ„์น˜์˜ ์„ธ ์ ์„ ๊ฐ๊ฐ a, b, c๋ผ๊ณ  ํ•˜๋ฉด Xb - Xa = 3, Xc – Xb = 3์œผ๋กœ ์„ธ ์ ์˜ ๊ฐ„๊ฒฉ์ด ๊ฐ™๋‹ค. ์œ„ ์˜ˆ์‹œ์—์„œ ๊ฐ„๊ฒฉ์ด ๊ฐ™์€ ์„ธ ์  a, b, c๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋Š” (-4, -1, 2), (-4, 0, 4), (0, 2, 4)์˜ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. N๊ฐœ์˜ ์ ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ„๊ฒฉ์ด ๊ฐ™์€ ์„ธ ์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋ชจ๋‘ ๋ช‡ ๊ฐ€์ง€ ์žˆ๋Š”์ง€ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž์—ฐ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์— ์ ์˜ ๊ฐœ์ˆ˜ N(3 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋‘˜์งธ ์ค„์—๋Š” N๊ฐœ์˜ ์ ์˜ ์œ„์น˜ X1, X2, X3 … Xn์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์ ์˜ ์œ„์น˜๋Š” -100,000,000์ด์ƒ 100,000,000์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค.

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๋‹ต์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ์ฒซ์งธ ์ค„์— ๊ฐ„๊ฒฉ์ด ๊ฐ™์€ ์„ธ ์  a, b, c๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์‹ค๋ฒ„2 ๋งž๋ƒ..?

์†”์งํžˆ ๋” ๋†’๊ฒŒ ์ณ์ค˜์•ผํ•จ

์˜ˆ์ „์— ์™„ํƒ์œผ๋กœ ํ’€๋‹ค๊ฐ€ ์žฅ๋ ฌํ•˜๊ฒŒ ์‹คํŒจํ•œ ๋ฌธ์ œ์ธ๋ฐ, ์ด๋ฒˆ์ฃผ์— ์ฝ”์•Œ๋ผ ์Šคํ„ฐ๋””์—์„œ ์ด๋ถ„ํƒ์ƒ‰ ๋‹ค๋ฃจ๊ธธ๋ž˜

๋‹ค์‹œ ํ’€์–ด๋ณด์•˜๋‹ค!

 

๋ณดํ†ต์€ ์ ‘๊ทผ๋ฐฉ๋ฒ•์ด

left์™€ right ์ธ๋ฑ์Šค ์ง€์ •ํ•ด์„œ ๊ฐ€์šด๋ฐ ๊ฐ’์„ ์ฐพ๋Š” ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š”๋ฐ,

 

๋‚˜๋Š” middle ๊ฐ’์„ ๋จผ์ € ์ง€์ •ํ•ด์ฃผ๊ณ , left ๊ฐ„๊ฒฉ๊ณผ right ๊ฐ„๊ฒฉ์„ ์ด์šฉํ•ด์„œ ํƒ์ƒ‰์„ ํ•ด์ฃผ์—ˆ๋‹ค. ์ด๊ฒƒ๋„ ์ด๋ถ„ํƒ์ƒ‰์ธ๊ฐ€..?

์–ด์จŒ๋“  ๋‚œ ์ด ํ’€์ด๊ฐ€ ๋” ํŽธํ–ˆ์Œ!

 

์ •๋ ฌ์€ ํ•„์ˆ˜!

์‚ฌ์‹ค ์ด๊ฑฐ ๋ฆฌ์ŠคํŠธ ์ฒ˜์Œ์— vector๋กœ ์•ˆํ•˜๊ณ  ๊ฑ intํ˜• ๋ฐฐ์—ด๋กœ 1001ํฌ๊ธฐ ์„ ์–ธํ•ด์„œ ํ–ˆ๋‹จ ๋ง์ด์ง€

๊ทผ๋ฐ ๊ทธ๊ฑธ ์ •๋ ฌํ•˜๋ฉด -4, -1,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...์ด๋”ด์‹์œผ๋กœ ๋˜๋Š”๋ฐ

๊ทธ๊ฑธ ๋ฐœ๊ฒฌ๋ชปํ•ด์„œ ๋ช‡ ๋ถ„ ์ •๋„ ํ—ค๋ฉจ๋‹ค ๋งž์™œํ‹€

^^...

 

 

 

๋‚˜์˜ ํ’€์ด

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int t;
    int n;

    cin >> t;
    for (int i = 0; i < t; ++i){
        vector<int> dots;
        int dot;
        cin >> n;
        for (int j = 0; j < n;++j){
            cin >> dot;
            dots.push_back(dot);
        }
        sort(dots.begin(), dots.end());

        int cnt = 0;
        for (int m = 1; m < n-1; ++m){
            int left = 0;
            int right = n - 1;
            while(left<right){
                if(left==m || m==right) break;
                
                int l_to_m = dots[m] - dots[left];
                int m_to_r = dots[right] - dots[m];
                
                if(l_to_m == m_to_r) {
                    cnt++;
                    left++;
                }
                else if(l_to_m > m_to_r) left++;
                else right--;
            }
        }
        cout << cnt << "\n";
    }
}

 

๊ทธ๋‚˜์ €๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž”๋””์ฐ๋˜ ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ๊ฐ€ ํ„ฐ์ ธ๋ฒ„๋ ธ๋Š”๋ฐ,,, 500

์กฐ์กŒ๊ตฐ

๋น ๋ฅธ ๋ณต๊ตฌ ๊ธฐ์›

 

๊ทธ๋ฆฌ๊ณ  ์š”์ฆ˜ ๋ธ”๋กœ๊ทธ ์ˆ˜์ต์ด ์ ์ง€๋งŒ ์€๊ทผ ์งญ์งคํ•ด์„œ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค

ํ‹ฐ์Šคํ† ๋ฆฌ ์ตœ๊ณ !