
내가 생각했을때 문제에서 원하는부분
입력은 여러 줄의 데이터로 구성된다.
각 데이터는 지름,
회전수,
시간이 공백으로 구분되어 주어진다.
지름은 inch단위의 실수이며,
회전수는 정수이다.
시간은 초단위의 실수로 주어진다.
입력은 회전수가 0이면 끝난다.
실수는 소수점 셋째자리이하까지 주어진다.
각각의 데이터에 대해 다음을 출력한다
Trip #N: distance MPH
N은 각각의 데이터 번호를 출력해야 하며,
distance는 총 거리(Miles)를 소수 둘째 자리까지 반올림하여 나타내며,
MPH는 평균 속도(miles per hour)를 소수 둘째 자리까지 반올림하여 나타낸다.
회전수가 0인 데이터에 대해서는 출력하지 않는다.
내가 이 문제를 보고 생각해본 부분
BufferedReader와 StringTokenizer를 사용하여 입력을 읽어온다.
변수 선언:
A: 자전거 바퀴의 지름 (인치)
B: 바퀴의 회전수
C: 걸린 시간 (초)
종료 조건: 회전수 B가 0이면 입력을 종료한다.
시간 변환: 걸린 시간을 초에서 시간으로 변환한다.
거리 계산:
바퀴의 원주를 계산하고, 회전수에 곱하여 이동 거리를 피트로 구한 후, 마일로 변환한다.
속도 계산: 이동 거리와 걸린 시간을 이용해 평균 속도를 계산한다.
결과 출력: 각 케이스에 대해 여행 번호, 이동 거리, 평균 속도를 포맷에 맞춰 출력한다.
코드로 구현
package baekjoon.baekjoon_24;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 백준 2765번 문제
public class Main842 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = 1; // 해당 케이스 수
while(true) {
StringTokenizer st = new StringTokenizer(br.readLine());
double A = Double.parseDouble(st.nextToken()); // 지름 변수 선언
double B = Double.parseDouble(st.nextToken()); // 회전수 변수 선언
double C = Double.parseDouble(st.nextToken()); // 초 순서로 변수 선언
if(B == 0) {
break; // 회전수가 0이면 종료
}
C = (C / 60) / 60; // 연산할때 사용할 초를 시간으로 바꿔준다. 3600을 나눠도 되고, 60으로 두번 나눠도 된다.
double distance = ((((A * 3.1415927) * B) / 12) / 5280); // 이동 거리를 밀리거리로 바꾸는 공식
double MPH = (distance / C); // MPH를 구하는 공식
// 결과 출력
System.out.printf("Trip #%d: %.2f %.2f%n", i, distance, MPH);
i++; // 반복이 넘어갈때마다 케이스 수에 1을 더한다.
}
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.