[백준] 1011 Fly me to the Alpha Centauri 자바

ChoRong0824·2023년 7월 16일
0

백준

목록 보기
13/14

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

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        for (int i = 0; i < T; i++) {
            String[] input = br.readLine().split(" ");
            int x = Integer.parseInt(input[0]);
            int y = Integer.parseInt(input[1]);

            int distance = y - x;
            int max = (int) Math.sqrt(distance);

            if (max == Math.sqrt(distance)) {
                System.out.println(2 * max - 1);
            } else if (distance <= max * (max + 1)) {
                System.out.println(2 * max);
            } else {
                System.out.println(2 * max + 1);
            }
        }
    }
}

코드설명

  1. T 횟수만큼 반복하여 각 테스트 케이스를 처리하며, 입력을 공백으로 구분하여 x와 y 값을 추출합니다.
  2. distance 변수를 사용하여 x와 y 사이의 거리를 계산합니다.
  3. max 변수를 사용하여 거리의 제곱근을 구합니다.
    이 무게 중심 이동 값을 일종의 최대 무게중심 이동 값으로 생각할 수 있습니다.
  4. 마지막으로 프로그램이 이동 횟수를 계산하여 출력합니다.
    이때 세 가지 경우로 나누어 계산합니다.
    • max 값이 거리의 제곱근과 동일한 경우: 이동 횟수는 2 * max - 1입니다.
    • 거리가 max (max + 1)보다 작거나 같은 경우: 이동 횟수는 2 max입니다.
    • 그렇지 않은 경우(거리가 max (max + 1)보다 큰 경우): 이동 횟수는 2 max + 1입니다.

결국, 수추리 & 계차수열의 문제인 것 같습니다.

참고로, 여기서 키 포인트는 "2" 입니다.

필자도 해당문제에 대해, 처음부터 이해를 하진 못했고,
해당 문제를 풀기 위해 참고 및 학습하였던 블로그의 출처를 남기겠습니다.
출처 : https://st-lab.tistory.com/79

profile
백엔드를 지향하며, 컴퓨터공학과를 졸업한 취준생입니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글