๋ฌธ์
์ฐํ์ด๋ ์ด๋ฆฐ ์์ , ์ง๊ตฌ ์ธ์ ๋ค๋ฅธ ํ์ฑ์์๋ ์ธ๋ฅ๋ค์ด ์ด์๊ฐ ์ ์๋ ๋ฏธ๋๊ฐ ์ค๋ฆฌ๋ผ ๋ฏฟ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฐ ์ง๊ตฌ๋ผ๋ ์ธ์์ ๋ฐ์ ๋ด๋ ค ๋์ ์ง 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 ๋์ด ์ฌ๋ฆฐ ํ์ ์ ์ ๋ฆฌ๋์ด ์๋ค.
๊ฐ ๊ฑฐ๋ฆฌ์ ์ ๊ณฑ๊ทผ๊ณผ ์ ๊ณฑ๊ทผ์ ๋ฐ์ฌ๋ฆผ ๊ฐ์ ๋ณด๋ฉด
์ ๊ณฑ๊ทผ <= ๋ฐ์ฌ๋ฆผ๊ฐ์ผ ๊ฒฝ์ฐ, 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
๋ ๋ถ์ ํ์ด์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ์๋ค.
'โจ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 2581๋ฒ : ์์ (0) | 2021.08.06 |
---|---|
[๋ฐฑ์ค/C++] 1978๋ฒ : ์์ ์ฐพ๊ธฐ (0) | 2021.08.05 |
[๋ฐฑ์ค/C++] 2839๋ฒ : ์คํ ๋ฐฐ๋ฌ (0) | 2021.08.04 |
[๋ฐฑ์ค/C++] 2775๋ฒ : ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ (0) | 2021.08.03 |
[๋ฐฑ์ค/C++] 10250 : ACM ํธํ (0) | 2021.08.02 |
๋๊ธ