• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

처음 μ‹œμž‘ν•  λ•Œμ™€ 끝날 λ•Œ 1 둜 μ‹œμž‘ν•˜κ³  1 둜 λλ‚˜μ•Ό ν•œλ‹€λŠ” 점을 μ˜ˆμ™Έμ‚¬ν•­μœΌλ‘œ 생각해두고 ν’€μ΄ν•œλ‹€.

이동할 수 μžˆλŠ” 방식이 n-1, n, n+1 둜 μ‚¬μš©ν•˜λŠ” 방식이기 λ•Œλ¬Έμ— μ–΄λŠ 정도 λŒ€μΉ­μ μœΌλ‘œ 계산해야 ν•œλ‹€κ³  μƒκ°ν–ˆλ‹€.

예λ₯Ό λ“€μ–΄ x, y κ°€ 각각 0, 5 라고 ν•˜λ©΄ 5 λ₯Ό 이동해야 ν•œλ‹€. μ‹œμž‘, 도착 1 κ΄‘λ…„ 2 번 μƒκ°ν•˜λ©΄ 3 이 남고, λ‚΄κ°€ 선택할 수 μžˆλŠ” 이동 방식이 1 κ΄‘λ…„ 이동 ν˜Ήμ€ 2 κ΄‘λ…„ 이동이닀. 2 κ΄‘λ…„ 2 λ²ˆμ€ μ‚¬μš©ν•  수 μ—†κΈ° λ•Œλ¬Έμ— 2, 1 을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

즉, n κ΄‘λ…„ x2 보닀 남은 거리가 κΈΈλ‹€λ©΄ λŒ€μΉ­μ μœΌλ‘œ 계산해주면 되고, n κ΄‘λ…„ x2 보닀 남은 거리가 μ§§κ±°λ‚˜ κ°™λ‹€λ©΄ n 광년을 1 번만 μ μš©ν•΄μ€€λ‹€. 같을 κ²½μš°μ—λŠ” n+1 κ΄‘λ…„ 1 번으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” 경우 (n=1 남은 거리=2) 와 μ²˜λ¦¬ν•  수 μ—†λŠ” 경우 (n=3, 남은 거리=6) κ°€ μžˆμ–΄ μ²˜λ¦¬ν•΄μ€€λ‹€.

μ²˜μŒμ— μƒκ°ν•΄λ‘μ—ˆλ˜ μ˜ˆμ™Έμ‚¬ν•­κΉŒμ§€ μ‹œμž‘ 단계에 μ μš©ν•΄μ€€λ‹€.

#include <bits/stdc++.h>
using namespace std;
 
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
 
	int T, x, y; 
	long long num, res = 0;
 
	cin >> T;
 
	for(int i = 0; i < T; i++){
		num = 1;
		res = 0;
		cin >> x >> y;
		long long diff = y - x;
		if(diff == 2){
			cout << 2 << '\n';
			continue;
		}
		while(true){
			if(num * 2 < diff){
				diff = diff - num * 2;
				res += 2;
				num++;
			}
			else if(num * 2 == diff){
				if (num+1 < diff) res += 2;
				else res++;
				break;
			}
			else {
				diff = diff - num;
				res++;
			}
			if(diff <= 0) break;
		}
		cout << res << '\n';
	}
 
	return 0;
}

풀이λ₯Ό λ°˜λ‘€λ₯Ό μ°Ύμ•„κ°€λ©° λΌμ›Œλ§žμΆ”κΈ°λ‘œ ν•΄μ„œ μ΄λ ‡κ²Œ ν‘ΈλŠ” 것이 μ˜³μ€ 것인가 생각이 λ“€μ–΄ λ‹€λ₯Έ 풀이λ₯Ό μ°Ύμ•„λ΄€λ”λ‹ˆ ν‘œλ₯Ό κ·Έλ € κ·œμΉ™μ„±μ„ μ°ΎλŠ” λ°©μ‹μœΌλ‘œ 많이 ν’€μ΄ν–ˆλ‹€. 체크해두고 λ‹€μ‹œ 풀어봐야겠닀.