hahn

단계별로 풀어보기(기본 수학1 - Fly me to the Alpha Centauri) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(기본 수학1 - Fly me to the Alpha Centauri)

hahn 2021. 8. 23. 23:56
728x90
반응형

1011번: Fly me to the Alpha Centauri (acmicpc.net)

 

1011번: Fly me to the Alpha Centauri

우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행

www.acmicpc.net

나도 드디어 골드 문제를 풀어보는구나 설렜다.

 

문제 읽고 오.. 근데 전에 푼 것보단 쉬운 거 같은데?

 

일단 규칙 찾으려고 착실하게 하나씩 적어가며 했다.

 

원래 노트에 적었는데 좀 옮겨보면

 

대충 좀 묶어보니 자릿 수가 늘어나는 기준이

 

반복 횟수에 따라

 

1번 -> 1번 -> 2번 -> 2번 -> 3번 -> 3번... 였다.

 

그래서 이에 맞춰 코드를 짜봤는데

 

시간 초과

시간 초과 뜨길래 음.. 뭐가 문제지 하다가

 

그냥 x에는 0, y에는 2^31 넣고

 

중간에 sysout 해서 compare 출력하게 했는데

 

음수 나오길래 아 값 초과했구나 싶어

 

double로 바꿨다.

 

근데 자꾸 틀렸다고 하길래 잘 보니까

 

testCase 여러 개 일 때는 변수 초기화해야 했는데

 

이걸 잊었던 거다...

 

암튼 그거 추가하고 Scanner에서 BufferedReader으로 바꿨다.

 

더보기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

class Main {
    
        
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		double testCaseCount, x, y, realDistance, compare, commonRatio, result;

		String[] strArr;

		testCaseCount = Double.parseDouble(br.readLine());

		for (int i = 0; i < testCaseCount; i++) {

			strArr = br.readLine().split(" ");

			compare = 1;
			commonRatio = 1;
			result = 0;

			x = Double.parseDouble(strArr[0]);
			y = Double.parseDouble(strArr[1]);

			realDistance = y - x;

			while (realDistance > compare) {

				for (int j = 0; j < commonRatio; j++) {

					compare++;

				}

				if (result % 2 == 0)
					commonRatio++;

				result++;
			}

			bw.write(((int) (result + 1)) + "\n");
		}

		bw.close();

	}

}

그래도 시간 초과 뜨길래

 

이 규칙이 아닌가? 하고 한 번 더 봤더니

 

for (int j = 0; j < commonRatio; j++) {

	compare++;

}

직감이 이 부분을 빼라길래 뺏다.

 

더보기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

class Main {
    
        
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		double testCaseCount, x, y, realDistance, compare, commonRatio, result;

		String[] strArr;

		testCaseCount = Double.parseDouble(br.readLine());

		for (int i = 0; i < testCaseCount; i++) {

			strArr = br.readLine().split(" ");

			compare = 1;
			commonRatio = 1;
			result = 0;

			x = Double.parseDouble(strArr[0]);
			y = Double.parseDouble(strArr[1]);

			realDistance = y - x;

			while (realDistance > compare) {

					compare += commonRatio;

				if (result % 2 == 0)
					commonRatio++;

				result++;
			}

			bw.write(((int) (result + 1)) + "\n");
		}

		bw.close();

	}

}

그랬더니 성공했다.

 

골드 문제인데 얘는 브론즈 문제보다는 쉬웠던 거 같다.

 

특히 그 대각선 문제

 

암튼 변수 초기화 잘 해주자

 

그리고 등차(비) 수열 표현하는 거 더럽게 어려운 거 같다.

 

뭔가 감이 안 잡혀..

728x90
반응형