문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
- BufferedReader를 사용하여 입력 값을 받았습니다.
- StringTokenizer를 통하여 입력값을 띄어쓰기 기준으로 나누었습니다.
- 이동하는 최소값 구하는 함수 FlyMeToTheAlphaCentauri을 만들었습니다.
- 반드시 마지막에는 거리를 1을 이동해야 한다는 뜻은 숫자가 증가해도 1까지는 내려와야 한다는 뜻이다.
- 예를 들어 숫자가 4가 되면 4,3,2,1로 최소 거리가 10은 남아있어야 하므로 최소 값을 sum으로 저장하였습니다.
- 계속 sum과 distance를 비교하며 숫자를 올릴 수 있는지 없는지 확인하였습니다.
- check를 통하여 숫자가 증가할 때와 감소할 때를 구분하여 계산하도록 하였습니다.
- distance와 sum이 같을 때 거리는 최소거리이므로 숫자에서 곧바로 1까지 내려가므로 횟수에 num을 더하였습니다.
- ex)distance가 10이 남았을 때 sum이 10이면 4,3,2,1로 수직적으로 내려간다.
- 결과를 bw에 저장하였습니다.
- BufferedWriter를 통해 저장된 결과를 출력하였습니다.
결과 코드
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력 값을 받는 BufferedReader
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//결과를 출력하는 BufferedWriter
StringTokenizer st;
int index = Integer.parseInt(br.readLine()); //반복 횟수
for(int i=0;i<index;i++){ //변수 저장 및 함수 실행
st = new StringTokenizer(br.readLine()," "); //줄마다 띄어쓰기 기준 나누기
int currentLocation = Integer.parseInt(st.nextToken()); //현재 위치
int arrivalLocation = Integer.parseInt(st.nextToken()); //목표 위치
int distance = arrivalLocation - currentLocation; //거리
int result = FlyMeToTheAlphaCentauri(distance); //함수 실행
bw.write(result + "\n"); //결과 bw에 저장
}
bw.flush(); //결과 출력
bw.close();
br.close();
}
public static int FlyMeToTheAlphaCentauri(int distance){ //최소값 계산 함수
int result = 0, sum = 1, num = 1; //횟수, 최소거리, 현재 숫자
boolean check = true; //숫자 올라가는지 내려가는지 확인
for(;;){
if(distance>sum && check){
//숫자 올라갈 때 거리가 최소거리보다 클 때
distance -= num;
num++;
sum += num;
result++;
}else if(distance==sum){ //거리랑 최소거리와 같을 때
result +=num;
break;
}else if(distance<sum && check){
//숫자 올라갈 때 거리가 최소거리보다 작을 때
sum-=num;
num--;
check = false;
}else if(distance>sum && !check){
//숫자 내려갈 때 거리가 최소거리보다 클 때
distance -= num;
result++;
}else if(distance<sum && !check){
//숫자 내려갈 때 거리가 최소거리보다 작을 때
sum-=num;
num--;
}
}
return result; //결과 반환
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:9,기본수학2,JAVA)2581번, 소수 (0) | 2022.01.02 |
---|---|
[백준] 단계별로 풀어보기(단계:9,기본수학2,JAVA)1978번, 소수 찾기 (0) | 2022.01.02 |
[백준] 단계별로 풀어보기(단계:8,기본수학1,JAVA)10757번, 큰 수 A+B (0) | 2021.12.31 |
[백준] 단계별로 풀어보기(단계:8,기본수학1,JAVA)2839번,설탕 배달 (0) | 2021.12.31 |
[백준] 단계별로 풀어보기(단계:8,기본수학1,JAVA)2775번,부녀회장이 될테야 (0) | 2021.12.30 |
댓글