์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ/BOJ_Java

[BOJ/Step8] 1011 : Fly me to the Alpha Centauri (JAVA)

NaNaRin๐Ÿ™ƒ 2021. 1. 18. 18:31

www.acmicpc.net/problem/1011

 

1011๋ฒˆ: Fly me to the Alpha Centauri

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 23๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ์„ธ๊ณ„ ์ตœ์—ฐ์†Œ ASNA ์šฐ์ฃผ ๋น„ํ–‰

www.acmicpc.net


๋ฌธ์ œ

์šฐํ˜„์ด๋Š” ์–ด๋ฆฐ ์‹œ์ ˆ, ์ง€๊ตฌ ์™ธ์˜ ๋‹ค๋ฅธ ํ–‰์„ฑ์—์„œ๋„ ์ธ๋ฅ˜๋“ค์ด ์‚ด์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฏธ๋ž˜๊ฐ€ ์˜ค๋ฆฌ๋ผ ๋ฏฟ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฐ€ ์ง€๊ตฌ๋ผ๋Š” ์„ธ์ƒ์— ๋ฐœ์„ ๋‚ด๋ ค ๋†“์€ ์ง€ 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 < 231)

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ๋Œ€ํ•ด x์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ y์ง€์ ๊นŒ์ง€ ์ •ํ™•ํžˆ ๋„๋‹ฌํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๊ณต๊ฐ„์ด๋™ ์žฅ์น˜ ์ž‘๋™ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1

3

0 3

1 5

45 50

 

์˜ˆ์ œ ์ถœ๋ ฅ 1

3

3

4


ํ’€์ด

(๋Œ€์ฒด ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ๋˜๋Š”์ง€ ๊ณ ๋ฏผ์„ ์—„์ฒญ ํ–ˆ๋Š”๋ฐ... ์‚ฌ์‹ค ๊ตฌ๊ธ€๋ง์˜ ๋„์›€์„ ์กฐ๊ธˆ ๋ฐ›์•˜๋‹ค)

๊ทœ์น™์„ฑ์„ ์ฐพ๊ธฐ ์œ„ํ•ด XY์‚ฌ์ด ๊ฑฐ๋ฆฌ๊ฐ€ 1์ผ ๋•Œ ๋ถ€ํ„ฐ ์ง์ ‘ ํ‘œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ๋กœ ํ•œ๋‹ค

XY ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ์ด ์ด๋™ ํšŸ์ˆ˜

ํ‘œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒฝ๊ณ„๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

   - n์˜ ์ œ๊ณฑ์ผ ๋•Œ (2์˜ ์ œ๊ณฑ 4, 3์˜ ์ œ๊ณฑ 9, …)

   - n์˜ ์ œ๊ณฑ์ผ ๋•Œ + n (2์˜ ์ œ๊ณฑ 4 + 2 ์ธ 6, 3์˜ ์ œ๊ณฑ 9 + 3์ธ 12, )

์ด ๋‘๊ฐ€์ง€ ๊ฒฝ๊ณ„๋กœ ์ด ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ๋ฐ”๋€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

(์˜ˆ๋ฅผ๋“ค์–ด 9 ~ 15 ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋Š” 9, 10~12, 12 ~ 15 ์„ธ ๊ตฌ๊ฐ„์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค)

 

์ฒซ๋ฒˆ์งธ ๊ฒฝ๊ณ„์˜ ์ „, ์ฆ‰ n์˜ ์ œ๊ณฑ์ผ ๋•Œ๋Š” 2 * ๋ฃจํŠธn - 1 ํšŒ ์ด๋™ํ•˜๊ณ 

์ฒซ๋ฒˆ์งธ ๊ฒฝ๊ณ„์™€ ๋‘๋ฒˆ์งธ ๊ฒฝ๊ณ„์˜ ์‚ฌ์ด๋Š” 2 * ๋ฃจํŠธn ํšŒ ์ด๋™ํ•˜๋ฉฐ

๋‘๋ฒˆ์งธ ๊ฒฝ๊ณ„ ์ดํ›„, n+1์˜ ์ œ๊ณฑ ์ „๊นŒ์ง€๋Š” 2 * ๋ฃจํŠธ + 1 ํšŒ ์ด๋™ํ•œ๋‹ค.

 

1. X์™€ Y๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด ์‚ฌ์ด ๊ฑฐ๋ฆฌ distance๋ฅผ ๊ตฌํ•œ๋‹ค.

2. distance์˜ ๋ฃจํŠธ๊ฐ’ root๋ฅผ ๊ตฌํ•œ๋‹ค. root๋ฅผ int๋กœ ํ˜•๋ณ€ํ™˜ ํ•˜๋ฉด ์ •์ˆ˜ ๋ถ€๋ถ„๋งŒ ๋‚จ๋Š”๋‹ค.

3. root์˜ ์ œ๊ณฑ์ด distance์™€ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค. ๊ฐ™๋‹ค๋ฉด ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋Š” 2 * root - 1

   => Math.sqrt() / Math.pow() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ

4. root์˜ ์ œ๊ณฑ๊ณผ distance์˜ ์ฐจ์ด๊ฐ€ root๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค. ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ตœ์†Œ ์ด๋™ ํšŸ์ˆ˜๋Š” 2 * root

5. ๋‚˜๋จธ์ง€๋Š” 2 * root + 1ํšŒ ์ด๋™ํ•œ๋‹ค.

 

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class B1011 {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int t = sc.nextInt();
		int count = 0;
		
		for(int i = 0; i < t; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			int distance = y - x;
			
			int root = (int)Math.sqrt(distance);
			if(distance - Math.pow(root, 2) == 0) {
				count = 2 * root -1;
			} else if(distance - Math.pow(root, 2) <= root) {
				count = 2 * root;
			} else {
				count = 2 * root + 1;
			}
			
			bw.write(Integer.toString(count));
			bw.newLine();
		}
		bw.flush();
	}
}