Problem Solving/BOJ

[λ°±μ€€ 1011] Fly me to the Alpha Centauri (C++)

kite707 2021. 12. 2. 23:56

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

 

1011번: Fly me to the Alpha Centauri

μš°ν˜„μ΄λŠ” μ–΄λ¦° μ‹œμ ˆ, 지ꡬ μ™Έμ˜ λ‹€λ₯Έ ν–‰μ„±μ—μ„œλ„ 인λ₯˜λ“€μ΄ μ‚΄μ•„κ°ˆ 수 μžˆλŠ” λ―Έλž˜κ°€ 였리라 λ―Ώμ—ˆλ‹€. 그리고 κ·Έκ°€ μ§€κ΅¬λΌλŠ” 세상에 λ°œμ„ λ‚΄λ € 놓은 지 23년이 μ§€λ‚œ μ§€κΈˆ, 세계 μ΅œμ—°μ†Œ ASNA 우주 λΉ„ν–‰

www.acmicpc.net

 

 

 

아이디어

λ§ˆμ§€λ§‰μ΄ 1둜 λλ‚˜λ„λ‘ 일단 λ‚˜μ—΄μ„ ν•΄λ΄€λŠ”λ° μ•„λž˜μ™€ κ°™μ•˜λ‹€.

숫자 식 횟수
1 1 1
2 1+1 2
3 1+1+1 3
4 1+2+1 3
5 1+2+1+1 4
6 1+2+2+1 4
7 1+2+2+1+1 5
8 1+2+2+2+1 5
9 1+2+3+2+1 5
10 1+2+3+2+1+1 6
11 1+2+3+2+2+1 6
12 1+2+3+3+2+1 6
13 1+2+3+3+2+2+1 7
14 1+2+3+3+2+2+1 7
15 1+2+3+3+3+2+2+1 8
16 1+2+3+4+3+2+1 8

μ œκ³±μˆ˜λ§ˆλ‹€ μƒˆλ‘œμš΄ μˆ«μžκ°€ λ‚˜νƒ€λ‚˜λŠ” 것을 λ³Ό 수 μžˆλ‹€. (4의 경우 2 λ“±μž₯, 9의 경우 3λ“±μž₯) 그리고 제곱수의 경우 1+2+3+..n+n-1+n-2+...1 즉 νšŸμˆ˜λŠ” 항상 수의 제곱근 +1이닀. (4의 경우 루트4+1. 즉 3이닀.)

그리고 5 6 7 8을 보면 56의경우 4번, 78의 5번인데 6은 2+4둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€λŠ” 사싀에 μ£Όλͺ©ν•˜μž.

λΉ„μŠ·ν•œ μ˜ˆμ‹œλ‘œ 9와 16μ‚¬μ΄μ—μ„œ νšŸμˆ˜κ°€ λ°”λ€ŒλŠ” 뢀뢄인 12μ—­μ‹œ 3+9이닀. μ½”λ“œλ‘œ λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

 

μ½”λ“œ

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


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	long long a, b;
	cin >> T;
	while (T != 0) {
		cin >> a >> b;
		int go =(int)sqrt(b - a);

		if (b - a < 4) {
			cout << b - a<<"\n";
		}
		else {
        //제곱수의 경우 ex)4
			if (b - a == go * go) {
				cout << 2 * go - 1 << "\n";
			}
            //거리+거리의 μ œκ³±κ·Όλ³΄λ‹€ 클 경우 ex)7,8
			else if (go * go + go < b - a) {
				cout << go * 2 + 1 << "\n";
			}
            //거리+거리의 μ œκ³±κ·Όλ³΄λ‹€ μž‘μ„ 경우ex)5,6
			else {
				cout << go * 2 << "\n";
			}
		}

		T--;
	}
}