망나니 AWOS의 일상
article thumbnail

문제를 요약하자면...

바퀴의 지름회전수이동거리를 구할 수 있고,

바퀴가 회전하는 동안 걸린 시간이동거리를 이용하여 평균 속도를 구할 수 있다.

 

다른 문제들과 다르게 쓰일 단위들이 많아서 힌트에 '이렇게 쓰면 된다'는 느낌으로 써주었다.

 

나 같은 경우 힌트를 안 보고 '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펄롱을 제외한 나머지를 정적 변수로 선언 및 초기화하여 썼다. 

 

조건은 출력 형식은

  1. Trip #N: distance MPH이고
  2. N은 각각의 데이터 번호를 출력,
  3. distance는 총 거리(Miles)를 소수 둘째 자리까지 반올림하여 출력,
  4. MPH는 평균 속도(miles per hour)를 소수 둘째 자리까지 반올림하여 출력
  5. 회전수가 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 함수로 반올림하여 소수점 둘째 자리까지 출력해주었다.

나머지는 공책에서 손코딩했던 내용을 넣어주었다.

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!