๋ฐ์ํ
www.acmicpc.net/problem/1011
์ด ๋ฌธ์ ๋ ์ ๋ง ์ด๋ ค์ ๋ค.. ๊ฒฐ๊ตญ ์ธํฐ๋ท์ ํ์ด๋ฅผ ๊ฒ์ํด์ ์ฐพ์๋ดค๋ค ใ .........
์ผ๋จ ๊ท์น์ ์ฐพ๊ธฐ ์ํด์ ํ๋ฅผ ํ๋ฒ ๊ทธ๋ ค๋ณด์.
distance = y - x
move = ๋ชจ๋ ์ด๋ ๊ฑฐ๋ฆฌ
count = ์ด ์ด๋ ํ์
max = ์ด๋ ๊ฑฐ๋ฆฌ ์ค ์ต๋ ์ด๋ ๊ฑฐ๋ฆฌ
์์ ํ๋ฅผ ๋ณด๋ฉด ์ธ๊ฐ์ง ๊ท์น์ ์ ์ ์๋ค.
- max ๊ฐ ๋ณํ๋ ์์ ์ distance๋ max์ ์ ๊ณฑ์ด ๋๋ค.
- max๊ฐ ๋ณํ๋ ์์ ์ count๋ max * 2 - 1์ด ๋๋ค.
- max๊ฐ ๋ณํ ์์ ๋ถํฐ count๊ฐ max๊ฐ์ฉ ๋ถ๋ฆฌ๋์ด count๊ฐ ๊ฐ๊ฒ ๋๋ค. (์ด ๋ถ๋ถ์ ์๋์์ ์์ธํ ์ค๋ช ํ๊ฒ ๋ค.)
๊ท์น 1.
// distance = max * max ;
int max = (int) Math.sqrt(distance);
๊ท์น 2.
// max๊ฐ distance์ ์ ๊ณฑ๊ทผ์ผ ๊ฒฝ์ฐ
if( max == Math.sqrt(distance) ){
count = max * 2 - 1;
}
๊ท์น 3.
์์ ํ๋ ๊ทธ๋ฆฐ ํ์ ์ผ๋ถ๋ถ์ ์๋ผ์จ ๋ถ๋ถ์ด๋ค.
max๊ฐ ๋ณํ ์์ ์ธ 9 ๋ถํฐ ๋ค์์ผ๋ก ๋ณํ๋ ์์ ์ธ 16๊น์ง์ ์ฌ์ด์ ์๋ ๊ฐ์๊ฐ max*2๊ฐ ๊ฐ ๋๋ค.
max๊ฐ ๋ณํ ์์ ์ดํ๋ก max๊ฐ๋ count๊ฐ max * 2๊ฐ ๋๊ณ ,
๊ทธ ์ดํ๋ก max๊ฐ๋ count๊ฐ max * 2 + 1์ด ๋๋ค.
๊ทธ๋ผ ์ฐ๋ฆฌ๋ count๋ฅผ ์ด๋ ๊ฒ ๊ตฌํ ์ ์๋ค.
// max * max < distance <= max*max + max --> max*2
// max*max + max < distance --> max*2 + 1
if( distance <= max * max + max ){
count = max * 2;
} else {
count = max * 2 + 1;
}
๋์ ํ์ด
package Baekjoon;
import java.io.*;
import java.util.StringTokenizer;
public class Alpha_Centauri {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
long X;
long Y;
long distance; // ํ์ฑ ๊ฐ ๊ฑฐ๋ฆฌ
long max;
long count = 0;
int T = Integer.parseInt(bf.readLine());
for (int i = 0; i < T; i++) {
st = new StringTokenizer(bf.readLine());
X = Integer.parseInt(st.nextToken());
Y = Integer.parseInt(st.nextToken());
distance = Y - X; // ๊ฑฐ๋ฆฌ ๊ณ์ฐ
max = (int)Math.sqrt(distance); // max ๊ตฌํ๊ธฐ
if (max == Math.sqrt(distance)) {
count = max * 2 - 1;
}else{
if (distance <= max*max + max) {
count = max * 2;
}else {
count = max * 2 + 1;
}
}
bw.write(count + "\n");
}
bw.flush();
bw.close();
}
}
๋ฐ์ํ