본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 4차 9번 (시침과 분침의 각도-Math함수)

by 우공80 2022. 11. 6.
728x90

시침과 분침의 각도

 

문제 지문 #9


hour 시 minute 분에 아날로그시계의 시침과 분침이 몇 도를 이루는지 계산하려 합니다. 예를 들어, 3시 00분에 시침과 분침은 90˚를 이룹니다.

어떤 시점의 시 hour, 분 minute이 매개변수로 주어질 때, hour 시 minute 분에 아날로그시계의 시침과 분침이 몇 도를 이루는지 return 하도록 solution 메서드를 작성해주세요.


#####매개변수 설명

어떤 시점의 시 hour, 분 minute이 solution 메서드의 매개변수로 주어집니다.

  • hour는 1 이상 12 이하인 자연수입니다.
  • minute은 0 이상 59 이하인 정수입니다.

#####return 값 설명

hour 시 minute 분에 아날로그 시계의 시침과 분침이 몇 도를 이루는지 return 하세요.

  • 단, 각도는 소수점 이하 첫째 자리까지 표현하세요.

#####예시

hour minute return
3 0 "90.0"


#####예시 설명

앞서 설명한 예와 같습니다.

728x90

 

혼자 풀이


함수 전체를 완성하는 문제입니다. 우선 각도를 구하는 알고리즘은 어렵지 않습니다. 분침과 시침이 0에서 시작하여 움직인 각도를 계산하고 두 수의 차의 절댓값을 구하면 됩니다.

단, 각도를 소수점 이하 첫째 자리까지 표현해야 되는데(소수점 첫째 자리 이하는 버림),
처음 풀이할 당시 소수점 버림 하는 함수와 절댓값을 계산해주는 함수를 몰라서 아래 주석 처리한 것과 같이 계산을 했습니다.  소수점 몇째 자리까지 표현할지, 인자를 받을 수 있을 줄 알았는데, Math.floor() 함수는 단순히 소수점 이하를 버리는 함수이므로 소수점 이하 첫 번째 자리까지 표현하려면 Math.floor()의 입력값에 10을 곱한 후 Math.floor()의 출력 값을 다시 10으로 나누면 됩니다. 만약 소수점 이하 두 번째 자리까지 표현한다면, 10이 아니라 10의 n제곱을 곱하고 나누어 주면 됩니다. Math 함수도 자주 사용되기 때문에 따로 정리하였습니다.

2022.11.06 - [Programming/Java] - [Java] Class Math - Math 클래스 주요 메서드 정리

 

[Java] Class Math - Math 클래스 주요 메서드 정리

Math 클래스란? 기본 지수, 로그, 제곱근 및 삼각 함수와 같은 자주 사용되는 기본 숫자 연산을 수행하기 위한 메서드를 구현한 클래스입니다. java.lang 패키지에 포함되어 별도 import를 할 필요가

woogong80.tistory.com

그리고, 시침과 분침의 각도를 계산한 결과가 180도보다 클 수 있습니다.(ex 1시 50분) 이 경우에는 각도가 작은 쪽으로 표현해주기 위해 360에서 빼주었습니다. 이 부분이 자칫 놓치고 가기 쉽습니다. 

// 다음과 같이 import를 사용할 수 있습니다.
import java.util.*;

class Main {
    public String solution(int hour, int minute) {
        // 여기에 코드를 작성해주세요.
        String answer = "";

        //시침의 각도  12시간이 360도
// 			int hourTmp=360*(hour+minute/60)/12*10;
// 			double hourPin=hourTmp/10;   //자리수 자르는 함수를 몰라서..

        double hourPin=Math.floor(360*(hour+minute/60)/12*10)/10;

        //분침의 각도
        double minutePin=6*minute;

        //시침과 분침의 차이
        // if(hourPin>minutePin){
        // 	answer=Double.toString(hourPin-minutePin);  //절대값 구하는 함수를 몰라서..
        // }else {
        // 	answer=Double.toString(minutePin-hourPin);
        // }

        answer=Double.toString(Math.abs(minutePin-hourPin));

        if(answer>180) return Double.toString(answer);
		else return Double.toString(360-answer);
    }
    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        Main sol = new Main();
        int hour = 3;
        int minute = 0;
        String ret = sol.solution(hour, minute);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 \"" + ret + "\" 입니다.");
    }
}

 

정답


샘플 문제에 대한 정답이 제공되지 않습니다. 

 

실습은 아래 참고


2022.10.25 - [Programming/Cos Pro 1급] - Cos Pro 1급 공부 사이트 추천 - 구름 에듀(https://edu.goorm.io/)

 

Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/)

구름 EDU??? YBM 공식 사이트에서 받은 문제 지문/문제 코드/정답 코드를 intellij에서 공부하다가 후배 추천으로 구름 에듀를 알게 되었습니다. 문제 지문 따로 문제 코드 따로 열어보는 게 여간 불

woogong80.tistory.com

728x90

댓글