๐Ÿ’  Cpp/[BOJ] ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ

[BOJ][C++] ๋ฐฑ์ค€ 1011๋ฒˆ : Fly me to the Alpha Centauri

์„ ๋‹ฌ 2021. 11. 12. 04:23
๋ฐ˜์‘ํ˜•

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

 

1011๋ฒˆ: Fly me to the Alpha Centauri

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 23๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ์„ธ๊ณ„ ์ตœ์—ฐ์†Œ ASNA ์šฐ์ฃผ ๋น„ํ–‰

www.acmicpc.net

 

๋“œ๋””์–ด.. ๋‹จ๊ณ„๋ณ„ ๋ฌธ์ œํ’€์ด "์ˆ˜ํ•™" ๋‹จ๊ณ„ ๋!!!!!!!
์–ผ๋งˆ๋‚˜ ๊ดด๋กœ์› ๋˜๊ฐ€....
๋ฐ˜๋ณต๋ฌธ๋งŒ ์“ฐ๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜๋Š” ๋ฌธ์ œ๋“ค ์ง‘ํ•ฉ์ด์˜€์Œ
๋งค์šฐ ๊ดด๋กœ์›Œ์„œ ๋ฌธ์ œ์ˆ˜๋Š” ์ ์Œ์—๋„ ๋ถˆ๊ณผํ•˜๊ณ  ์—„์ฒญ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค ใ…Žใ…Ž
์•„์ฃผ.. ์งœ์ฆ๋‚ฌ๋‹ค..
์•„์ž ๋งŒ..
๊ธฐ๋ณธ์ˆ˜ํ•™ 1 ์ด์˜€๋„ค
๊ธฐ๋ณธ์ˆ˜ํ•™ 2 ๋„ ์žˆ๋‹ค๋Š”๊ฑฐ์ž–์•„
์‹ซ์–ด.....

 

๋ฌธ์ œ

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 23๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ์„ธ๊ณ„ ์ตœ์—ฐ์†Œ ASNA ์šฐ์ฃผ ๋น„ํ–‰์‚ฌ๊ฐ€ ๋˜์–ด ์ƒˆ๋กœ์šด ์„ธ๊ณ„์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“๋Š” ์˜๊ด‘์˜ ์ˆœ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.

๊ทธ๊ฐ€ ํƒ‘์Šนํ•˜๊ฒŒ ๋  ์šฐ์ฃผ์„ ์€ Alpha Centauri๋ผ๋Š” ์ƒˆ๋กœ์šด ์ธ๋ฅ˜์˜ ๋ณด๊ธˆ์ž๋ฆฌ๋ฅผ ๊ฐœ์ฒ™ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€๊ทœ๋ชจ ์ƒํ™œ ์œ ์ง€ ์‹œ์Šคํ…œ์„ ํƒ‘์žฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ํฌ๊ธฐ์™€ ์งˆ๋Ÿ‰์ด ์—„์ฒญ๋‚œ ์ด์œ ๋กœ ์ตœ์‹ ๊ธฐ์ˆ ๋ ฅ์„ ์ด ๋™์›ํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜๋ฅผ ํƒ‘์žฌํ•˜์˜€๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜๋Š” ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋Š˜๋ฆด ๊ฒฝ์šฐ ๊ธฐ๊ณ„์— ์‹ฌ๊ฐํ•œ ๊ฒฐํ•จ์ด ๋ฐœ์ƒํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์–ด์„œ, ์ด์ „ ์ž‘๋™์‹œ๊ธฐ์— k๊ด‘๋…„์„ ์ด๋™ํ•˜์˜€์„ ๋•Œ๋Š” k-1 , k ํ˜น์€ k+1 ๊ด‘๋…„๋งŒ์„ ๋‹ค์‹œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์žฅ์น˜๋ฅผ ์ฒ˜์Œ ์ž‘๋™์‹œํ‚ฌ ๊ฒฝ์šฐ -1 , 0 , 1 ๊ด‘๋…„์„ ์ด๋ก ์ƒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์‚ฌ์‹ค์ƒ ์Œ์ˆ˜ ํ˜น์€ 0 ๊ฑฐ๋ฆฌ๋งŒํผ์˜ ์ด๋™์€ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ 1 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๋‹ค์Œ์—๋Š” 0 , 1 , 2 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ( ์—ฌ๊ธฐ์„œ ๋‹ค์‹œ 2๊ด‘๋…„์„ ์ด๋™ํ•œ๋‹ค๋ฉด ๋‹ค์Œ ์‹œ๊ธฐ์—” 1, 2, 3 ๊ด‘๋…„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. )

๊น€์šฐํ˜„์€ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜ ์ž‘๋™์‹œ์˜ ์—๋„ˆ์ง€ ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค๋Š” ์ ์„ ์ž˜ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— x์ง€์ ์—์„œ y์ง€์ ์„ ํ–ฅํ•ด ์ตœ์†Œํ•œ์˜ ์ž‘๋™ ํšŸ์ˆ˜๋กœ ์ด๋™ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ y์ง€์ ์— ๋„์ฐฉํ•ด์„œ๋„ ๊ณต๊ฐ„ ์ด๋™์žฅ์น˜์˜ ์•ˆ์ „์„ฑ์„ ์œ„ํ•˜์—ฌ y์ง€์ ์— ๋„์ฐฉํ•˜๊ธฐ ๋ฐ”๋กœ ์ง์ „์˜ ์ด๋™๊ฑฐ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ 1๊ด‘๋…„์œผ๋กœ ํ•˜๋ ค ํ•œ๋‹ค.

๊น€์šฐํ˜„์„ ์œ„ํ•ด x์ง€์ ๋ถ€ํ„ฐ ์ •ํ™•ํžˆ y์ง€์ ์œผ๋กœ ์ด๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ณต๊ฐ„ ์ด๋™ ์žฅ์น˜ ์ž‘๋™ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

์ž…๋ ฅ

์ž…๋ ฅ์˜ ์ฒซ ์ค„์—๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด ํ˜„์žฌ ์œ„์น˜ x ์™€ ๋ชฉํ‘œ ์œ„์น˜ y ๊ฐ€ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง€๋ฉฐ, x๋Š” ํ•ญ์ƒ y๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. (0 ≤ x < y < 231)

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด x์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ y์ง€์ ๊นŒ์ง€ ์ •ํ™•ํžˆ ๋„๋‹ฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜ ์ž‘๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์‹œํ–‰์ฐฉ์˜ค

๊ทœ์น™์ด ์ „ํ˜€ ๋ณด์ด์ง€ ์•Š์•„์„œ ์‚ด~์ง ํžŒํŠธ๋ฅผ ์–ป์€ ๋’ค์—

๊ทธ๋ƒฅ ๋ฌด์ž‘์ • ๋…ธ๊ฐ€๋‹ค๋กœ ์จ๋‚˜๊ฐ”๋‹ค

๊ฝค๋‚˜ ๋งŽ์€๊ฑธ ์ ์€ ํ›„์— ๊ทœ์น™์„ ์ฐพ์•˜๋‹ค

 

์ œ๊ณฑ์ˆ˜์—์„œ ํ•œ๋‹จ๊ณ„ ์ถ”๊ฐ€ ๋˜๊ณ  

์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์™€ ๋‹ค์Œ๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์˜ ์ค‘๊ฐ„๊ฐ’์—์„œ ํ•œ๋‹จ๊ณ„๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค

 

์ด๋•Œ ์ „๋‹จ๊ณ„์ œ๊ณฑ์ˆ˜์™€๋‹ค์Œ๋‹จ๊ณ„์ œ๊ณฑ์ˆ˜์˜์ค‘๊ฐ„๊ฐ’ ์€ ์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜ + ์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ ์œผ๋กœ ๊ตฌํ• ์ˆ˜ ์žˆ๋Š”๋ฐ..

์ด๊ฒŒ ์ฐธ ๊ธ€๋กœ ํ‘œํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋„ค

 

ํ’€์ด1 : ์‹œ๊ฐ„์ดˆ๊ณผ

๋‚˜๋ฆ„... ๊ทœ์น™์—ด์‹ฌํžˆ ์จ์„œ ์—ด์‹ฌํžˆ ํ’€์—ˆ๋Š”๋ฐ..

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    
    double t, x, y, d, cnt;
    cin >> t;
    
    while(t--){
        cin >> x >> y;
        d = y - x;
        
        cnt = 1;
        
        for(double i=1; i<=d; i++){
                        
            //i๊ฐ€ ์ œ๊ณฑ์ˆ˜๋ฉด ์ฆ๊ฐ€
            if((int)sqrt(i) == sqrt(i))
                cnt++;
            
            //i๊ฐ€ ์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์™€ ๋‹ค์Œ๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์˜ ์‚ฌ์ด์— ์žˆ์œผ๋ฉด ์ฆ๊ฐ€
            if(i == (int)sqrt(i)*(int)sqrt(i) + (int)sqrt(i))
                cnt++;
        }
        
        cout << cnt << "\n";
    }
    
    
    return 0;
}

 

https://www.acmicpc.net/board/view/26059

 

๊ธ€ ์ฝ๊ธฐ - โ˜…โ˜…โ˜… ํ•„๋…!!! โ˜…โ˜…โ˜… Fly Me FAQ โ˜…โ˜…โ˜… ์•ˆ ์ฝ์œผ๋ฉด ํ›„ํšŒ! โ˜…โ˜…โ˜…

๋Œ“๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

www.acmicpc.net

 

๋‚ด ์ฝ”๋“œ๋Š” ์œ„ ๊ธ€์— ๋‚˜์™€์žˆ๋Š” ์ž˜๋ชป๋œ ์˜ˆ์‹œ์˜ ์ „ํ˜•์ด์˜€๋‹ค

์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(y-x)๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ..

๋ฌธ์ œ๋Š” ๋ฒ”์œ„๊ฐ€ 2^31 ์Šน ๊นŒ์ง€ ์žˆ์Œ

O(2^31) ? ์–ด๋ฆผ๋„ ์—†๋‹ค

 

๊ทธ๋ฆฌํ•˜์—ฌ..

 

ํ’€์ด 2 : ๋งž์•˜์Šต๋‹ˆ๋‹ค!

์—ด์‹ฌํžˆ ๋‹ค์‹œํ’€์—ˆ์ง€ ๋ญ..

๋‚ด๊ฐ€ ์•Œ์•„๋‚ธ ๊ทœ์น™์„ ๋ฒ„๋ฆฌ๊ณ  ์‹ถ์ง€๋Š” ์•Š์•˜๋‹ค

๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹  ๊ฑฐ๋ฆฌ์—์„œ ๋ฐ”๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‚ด์ง ๋ฐ”๊ฟจ๋‹ค

 

์ œ๊ณฑ๊ทผ*2 - 1 ์ด๋ผ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋‹ต์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ 

๊ทธ ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ์ž‘์€์ง€ ํฐ์ง€์— ๋”ฐ๋ผ +1 +2 ๋ฅผ ํ•ด์ฃผ๋ฉด ๋˜๋”๋ผ

 

#include <iostream>
#include <cmath>

using namespace std;

int main() {
    
    int t, x, y, d, cnt, tmp;
    cin >> t;
    
    while(t--){
        
        cin >> x >> y;
        d = y - x;
        tmp = (int)sqrt(d);
        
        //์ œ๊ณฑ์ˆ˜๋ผ๋ฉด
        if (d == tmp*tmp)
            cnt = tmp*2 - 1;
        
        //์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜ ~ ๋‹ค์Œ๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์™€ ์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์˜ ์ค‘๊ฐ„๊ฐ’ ์‚ฌ์ด
        else if (d <= tmp*tmp + tmp)
            cnt = tmp*2;
        
        //๋‹ค์Œ๋‹จ๊ณ„์™€ ์ œ๊ณฑ์ˆ˜์™€ ์ „๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜์˜ ์ค‘๊ฐ„๊ฐ’ ~ ๋‹ค์Œ๋‹จ๊ณ„ ์ œ๊ณฑ์ˆ˜ ์‚ฌ์ด
        else
            cnt = tmp*2 + 1;
        
        cout << cnt << "\n";
    }
    
    return 0;
}

 

๋ฐ˜์‘ํ˜•