문제를 요약하자면...
바퀴의 지름과 회전수로 이동거리를 구할 수 있고,
바퀴가 회전하는 동안 걸린 시간과 이동거리를 이용하여 평균 속도를 구할 수 있다.
다른 문제들과 다르게 쓰일 단위들이 많아서 힌트에 '이렇게 쓰면 된다'는 느낌으로 써주었다.
나 같은 경우 힌트를 안 보고 'miles to inch'를 검색하여 찾았지만 ㅋㅋㅋ 예제 입/출력을 보다가 힌트가 있는 것을 보게 되어 참조했다.
코딩을 하기 전에 어떻게 풀지 공책에 끄적여 보았다.
지름(diameter) : d, 회전수(cycle) : c, 걸린 시간(second) : s
이동거리 : distance, 평균 속도 : mph
이동거리 같은 경우 입력에서는 inch로 입력 받는데 출력에서 miles로 출력해야 되기 때문에 inch를 5280으로 나눠서 feet로 단위를 변환시켜주고 12로 나눠서 miles로 단위를 변환시켜줘야 돼서 이동거리의 공식이 아래와 같다.
distance = (d x π x c) / (5280 x 12)
평균 속도 같은 경우 입력에서는 초(second)로 입력 받는데 출력에서 시간(hour)으로 출력해야 되기 때문에 위의 이동거리 리 구하는 공식과 마찬가지로 분, 시간으로 단위 변환을 시켜줘서 아래와 같은 공식이 나오게 된다.
mph = (distance x 60 x 60) / s
공식은 구해졌으니 이제 코드를 짜보자.
힌트에 나와있는 1펄롱을 제외한 나머지를 정적 변수로 선언 및 초기화하여 썼다.
조건은 출력 형식은
- Trip #N: distance MPH이고
- N은 각각의 데이터 번호를 출력,
- distance는 총 거리(Miles)를 소수 둘째 자리까지 반올림하여 출력,
- MPH는 평균 속도(miles per hour)를 소수 둘째 자리까지 반올림하여 출력
- 회전수가 0인 데이터에 대해서는 그대로 반복문 종료
일단 1번 2번 5번까지만 적용하여 코드를 작성해보았다.
int N = 1;
while (true) {
double distance = 0;
double mph = 0;
// 지름(diameter) = 단위 inch
double d = sc.nextDouble();
// 회전수(cycle)
int c = sc.nextInt();
// 걸린 시간(s) = 단위 second
int s = sc.nextInt();
if (c == 0)
break;
System.out.println("Trip #" + N + ": " + distance + " " + mph);
N++;
}
이제 이 상태에서 3번과 4번을 포함하여 코드를 추가하면 된다.
완성된 코드 😊😊
import java.util.Scanner;
public class Main {
static double pi = 3.1415927;
static int mileToFeet = 5280;
static int feetToInch = 12;
static int hourToMinute = 60;
static int MinuteToSec = 60;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = 1;
while (true) {
// 출력할 이동 거리, 평균 속도
double distance = 0;
double mph = 0;
// 지름(diameter) = 단위 inch
double d = sc.nextDouble();
// 회전수(cycle)
int c = sc.nextInt();
// 걸린 시간(s) = 단위 second
double s = sc.nextDouble();
if (c == 0)
break;
distance = (d*pi*c) / (mileToFeet * feetToInch);
mph = distance* MinuteToSec * hourToMinute / s;
System.out.println("Trip #" + N + ": " + String.format("%.2f", distance) +
" " + String.format("%.2f", mph));
N++;
}
sc.close();
}
}
String.format 함수로 반올림하여 소수점 둘째 자리까지 출력해주었다.
나머지는 공책에서 손코딩했던 내용을 넣어주었다.
'알고리즘 > 백준' 카테고리의 다른 글
[java] 백준 2501번 약수 구하기 (4) | 2021.08.11 |
---|---|
[java] 백준 1568번 새 (13) | 2021.08.10 |
[java] 백준 2523번 별 찍기 - 13 (6) | 2021.08.09 |
[java] 백준 5073번 삼각형과 세 변 (2) | 2021.08.09 |
[java] 백준 1252번 이진수 덧셈 (11) | 2021.08.08 |
펄의 일상이 궁금한 사람 요기~
즐거운 하루 되셨으면 좋겠습니다😊