안녕하세요 Jin's 입니다.
백준 알고리즘의 수학1 중 Fly me to the Alpha Centauri ( 문제 번호 : 1011 )의 소스입니다.
Java와 Python 두가지 버전 소스입니다.
위치 | 공간이동경로 | 거리 | 이동횟수 | 제곱근의 루트 | 제곱근의 루트 절대값 |
0~1 | 1 | 1 | 1 | 1.0 | 1 |
0~2 | 1 1 | 2 | 2 | 1.4 | 1 |
0~3 | 1 2 1 | 3 | 3 | 1.7 | 1 |
0~4 | 1 2 1 1 | 4 | 3 | 2.0 | 2 |
0~5 | 1 2 2 1 | 5 | 4 | 2.2 | 2 |
0~6 | 1 2 1 1 1 | 6 | 4 | 2.4 | 2 |
0~7 | 1 2 2 1 1 | 7 | 5 | 2.6 | 2 |
0~8 | 1 2 2 2 1 | 8 | 5 | 2.8 | 2 |
0~9 | 1 2 3 2 1 | 9 | 5 | 3.0 | 3 |
[ 거리의 제곱근 루트 패턴 ]
- 정수일 경우
ex ) 0~1, 0~4, 0~9
공식 -> 2*제곱근의 루트 -1
- 반올림할 경우
- 버림
ex ) 0~2, 0~5, 0~6
공식 -> 2*제곱근의 루트 절대값 -1
- 올림
ex ) 0~3, 0~7, 0~8
공식 -> 2*제곱근의 루트 절대값
1) JAVA
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = Integer.parseInt(scan.nextLine());
for(int i=0; i<t; i++){
long x = scan.nextLong();
long y = scan.nextLong();
long distance = y-x;
long max = (int)Math.sqrt(distance);
//0~1, 0~4, 0~9
if(max == Math.sqrt(distance)){
System.out.println(2*max-1);
//0~2,0~5, 0~6
}else if( Math.sqrt(distance) - max <= 0.5 ){
System.out.println(2*max);
//0~3, 0~7, 0~8
}else{
System.out.println(2*max+1);
}
}
scan.close();
}
}
2) PYTHON
import math
t = int(input())
for _ in range(t):
x, y = map(int, input().split())
distance = y - x
max = int(math.sqrt(distance))
if max == math.sqrt(distance):
print(2*max-1)
elif math.sqrt(distance) - max <= 0.5:
print(2*max)
else:
print(2*max+1)
여러분도 한번 풀어보세요!
'Development > 알고리즘' 카테고리의 다른 글
[ 백준 알고리즘 ] 2581번 소수 (JAVA/python) (0) | 2020.07.28 |
---|---|
[ 백준 알고리즘 ] 1978번 소수 찾기 (JAVA/python) (0) | 2020.07.27 |
[ 백준 알고리즘 ] 10250번 ACM 호텔 (JAVA/python) (0) | 2020.07.20 |
[ 백준 알고리즘 ] 2275번 부녀회장이 될테야 (JAVA/python) (0) | 2020.07.15 |
[ 백준 알고리즘 ] 2292번 벌집 (JAVA/python) (0) | 2020.07.14 |