๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœจ Algorithm

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

by nitronium102 2021. 8. 5.

๋ฌธ์ œ

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 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 < 2^31)

์ถœ๋ ฅ

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

ํ’€์ด

์ด ๋ฌธ์ œ๋Š” ๊ทœ์น™์„ ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„์•ผ ํ•ด์„œ ์กฐ๊ธˆ ์–ด๋ ค์› ๋‹ค. ์ด 2๊ฐ€์ง€์˜ ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™๊นŒ์ง€๋งŒ ์•Œ์•„๋‚ด์„œ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

01. ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰์—๋Š” ๋ฌด์กฐ๊ฑด 1๊ด‘๋…„์„ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ "๋งˆ์ง€๋ง‰์— 1๊ด‘๋…„์„ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค"๋Š” ๊ฒƒ์ด๋‹ค. 

๋•Œ๋ฌธ์— ์ด๋™ํ•  ๊ฒฝ์šฐ 1 -> 2 -> .... -> 2 -> 1 ์ˆœ์„œ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค. 

1 > 2 > 1 = 1+2+1 = 4 -> 2*2 (์ด๋™ํšŸ์ˆ˜ 3)

1 > 2 > 3 > 2 > 1 = 1+2+3+2+1 = 9 -> 3*3 (์ด๋™ํšŸ์ˆ˜ 5)

1 > 2 > 3 > 4 > 3 > 2 > 1 = 1+2+3+4+3+2+1 = 16 = 4*4 (์ด๋™ํšŸ์ˆ˜ 7)

=> ์ตœ๋Œ€ ์ด๋™ ์†๋„ = N^2, ์ด๋™ ํšŸ์ˆ˜ = 2N-1์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

02. ์ฐจ์› ์ด๋™์˜ ํšŸ์ˆ˜ ๊ณ„์‚ฐ

์œ„์˜ ๊ณ„์‚ฐ์œผ๋กœ ๋‘ ์ง€์  ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์ œ๊ณฑ์ˆ˜์ผ๋•Œ์˜ ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–จ๊นŒ?

 

https://jaynamm.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1011%EB%B2%88-Fly-me-to-the-Alpha-Centauri ๋‹˜์ด ์˜ฌ๋ฆฐ ํ‘œ์— ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋‹ค.

jaynamm.tistory.com์˜ ์ž๋ฃŒ

๊ฐ ๊ฑฐ๋ฆฌ์˜ ์ œ๊ณฑ๊ทผ๊ณผ ์ œ๊ณฑ๊ทผ์˜ ๋ฐ˜์˜ฌ๋ฆผ ๊ฐ’์„ ๋ณด๋ฉด 

์ œ๊ณฑ๊ทผ <= ๋ฐ˜์˜ฌ๋ฆผ๊ฐ’์ผ ๊ฒฝ์šฐ, 2*๋ฐ˜์˜ฌ๋ฆผ - 1

์ œ๊ณฑ๊ทผ > ๋ฐ˜์˜ฌ๋ฆผ๊ฐ’์ผ ๊ฒฝ์šฐ 2*๋ฐ˜์˜ฌ๋ฆผ 

 


์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ฐธ๊ณ ๋กœ ์ž…๋ ฅ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ 2^31์ด๋ฏ€๋กœ x, y์˜ ์ž๋ฃŒํ˜•์€ long long์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

#include <iostream>
#include <cmath>

using namespace std;

int main(){
	cin.tie(0);
	int t;
	cin >> t;
	
	long long x, y;
	
	for(int i=0; i<t; i++){
		cin >> x >> y;
		double distance = y-x; // ๋‘ ์ง€์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ
		double dpow = sqrt(distance); // ๊ฑฐ๋ฆฌ์˜ ์ œ๊ณฑ๊ทผ
		int pow = round(sqrt(distance)); // ๊ฑฐ๋ฆฌ์˜ ์ œ๊ณฑ๊ทผ์„ ๋ฐ˜์˜ฌ๋ฆผ
		
		if(dpow <= pow) cout << pow * 2 - 1 << "\n"; 
		else cout << pow * 2 << "\n"; 
	}
		
	return 0;
}

 

 

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int main() {
    int num;
    scanf("%d",&num);
    for(int i = 0; i < num; i++)
    {
        long long x,y;
        long long move,max = 0;
        cin >>x>>y;
        while(max*max <= y-x)
            max++;
        max--;
        move = 2*max -1;
        long long rem = y-x - max*max;
        rem = (long long)ceil((double)rem / (double)max);
        move += rem;
        printf("%lld\n",move);
    }
}

https://cryptosalamander.tistory.com/25

 

[๋ฐฑ์ค€ / BOJ] - 1011๋ฒˆ Fly me to the Alpha Centauri C++ ํ’€์ด

๋ฐฑ์ค€ - ๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ [1011] https://www.acmicpc.net/problem/1011 ๋ฌธ์ œ ์ฒ˜์Œ ์ด๋™ ํ•  ๋•Œ -1, 0 , 1 ์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์šฐ์ฃผ์„ ์€, ํ•ญ์ƒ k๊ด‘๋…„ ์ด๋™์‹œ๋งˆ๋‹ค k-1, k, k+1 ๊ด‘๋…„๋งŒํผ๋งŒ ๋‹ค์‹œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. x..

cryptosalamander.tistory.com

https://jaynamm.tistory.com/entry/%EB%B0%B1%EC%A4%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-1011%EB%B2%88-Fly-me-to-the-Alpha-Centauri

 

[๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜] 1011๋ฒˆ : Fly me to the Alpha Centauri

๋ฌธ์ œ 1011๋ฒˆ : Fly me to the Alpha Centauri 1011๋ฒˆ: Fly me to the Alpha Centauri ์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ..

jaynamm.tistory.com

๋‘ ๋ถ„์˜ ํ’€์ด์™€ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ •๋ฆฌํ•˜์˜€๋‹ค.

๋Œ“๊ธ€