wisePocket

[Algorithm] 입력한 각도의 종류를 설명해주는 계산기 만들기 본문

Java & Algorithm/Algorithm Practice

[Algorithm] 입력한 각도의 종류를 설명해주는 계산기 만들기

ohnyong 2023. 8. 1. 23:02

입력한 각도의 종류를 설명해주는 계산기

정해진 나의 룰에 따라서 연습 문제를 계속해서 답안을 보지 않고 스스로 풀어보고자 한다.

핵심이 되었던 연습 과정은 아래 두개 과정이다.
물론 이 구조가 이제 Java를 배우면서 더 깊게 변경 될 예정이다.
하지만 해당 카테고리 페이지는 
알고리즘 문제 해결을 하기 위한 연습이 주 목적이라서
기본적으로 내가 객체 인스턴스화를 통해 메서드 호출을 구분하면서 
"연산"에 집중 할 수 있는 나만의 틀로 활용하고자 한다.
 
https://ohnyong.tistory.com/177
 [Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 받기

https://ohnyong.tistory.com/178
 [Algorithm★] 4칙연산을 해주는 계산기 - 객체 지향 - 혼자 만들기+ChatGPT의 피드백 적용

이건 조건이 많아보이지만 위 틀을 잡고 연산에만 집중하면 금방 풀 수 있다. 쳐다보는 것 보다 직접 메서드에 하나씩 옮기면서 남은 부분을 처리하는게 훨씬 머릿속으로 잘 그려졌다.

 

1. 문제 파악 과정
 - 필요 데이터 파악
    +--- 데이터 타입 확인

 - 필요 메서드 파악
    +--- 기본 입력부 input(){} 
             +-- 입력 값 갯수 확인
             +-- 데이터 제한조건 파악(유효성검사 while loop)
    +--- 기본 계산부 calculate(){}
             +-- 필요 연산 확인
             +-- 필요 조건 확인
    +--- 기본 출력부 output(){}
             +-- 출력할 데이터, 내용 확인
    +--- 각 메서드 별 파라미터 전달 필요 부분 확인
 
2. 코드 작성 과정
 - Main.java 실행부 생성 , Solution.java 클래스(설계도) 생성

 - 클래스 member 구현
    +--- 필요 데이터 정리에 따라 변수 선언
    +--- 기본 생성자 선언
    +--- 필요 메서드 정리에 따른 메서드 선언
             +-- input(){}과 관련된 메서드부터 작성, 유효성 체크(진입부 메서드)
             +-- calculate(){}의 실제 연산 로직 작성
             +-- output(){}의 출력 관련 정리

 - 실행부 Main.java에서 객체 인스턴스 생성 및 객체로부터 진입부 메서드 호출

 


1. Main.java

package Algorithm04;

public class Main {
    public static void main(String[] args) {
        System.out.println("각에서 0도 초과 90도 미만은 예각,\n" +
                " 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다.\n" +
                " 각 angle이 매개변수로 주어질 때 \n" +
                "예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를\n" +
                "return하도록 solution 함수를 완성해주세요.\n" +
                "\n" +
                "예각 : 0 < angle < 90\n" +
                "직각 : angle = 90\n" +
                "둔각 : 90 < angle < 180\n" +
                "평각 : angle = 180\n" +
                "제한사항\n" +
                "0 < angle ≤ 180\n" +
                "angle은 정수입니다.\n");
        Solution solution = new Solution();
        solution.intputAngle();
    }
}

 

2. Solution.java

package Algorithm04;

import java.util.Scanner;

public class Solution {
    //필요데이터
    //angleInputNum <-input 스캐너, int형, 0<angle<=180 제한사항 유효성체크 while,
    // angleStr <- 예각, 직각, 둔각, 평각 표현
    // angleOutputNum <-output
    //필요메서드
    //inputAngle()
    //calculate()
    //outputAngle()
    int angleInputNum;
    String angleStr;
    int angleOutputNum;
    Scanner sc = new Scanner(System.in);

    public Solution() {

    }

    void intputAngle() {
        while (true) {
            System.out.println("각도를 입력해주세요.");
            angleInputNum = sc.nextInt();
            if (angleInputNum < 0 || angleInputNum > 180) {
                System.out.println("각도는 0~180도까지만 입력해주세요.");
                continue;
            } else {
                calculate(angleInputNum);
                break;
            }
        }
    }

    void calculate(int angleInputNum) {
        if (angleInputNum > 0 && angleInputNum < 90) {
            angleStr = "예각";
            angleOutputNum = 1;
            outputAngle(angleStr, angleOutputNum);
        } else if (angleInputNum == 90) {
            angleStr = "직각";
            angleOutputNum = 2;
            outputAngle(angleStr, angleOutputNum);
        } else if (angleInputNum > 90 && angleInputNum < 180) {
            angleStr = "둔각";
            angleOutputNum = 3;
            outputAngle(angleStr, angleOutputNum);
        } else if (angleInputNum == 180) {
            angleStr = "평각";
            angleOutputNum = 4;
            outputAngle(angleStr, angleOutputNum);
        } else {
            System.out.println("잘못된 접근 입니다.");

        }
    }

    void outputAngle(String angleStr, int angleOutputNum) {
        System.out.printf("입력하신 값은 %s이며 표현값은 '%d' 입니다.", angleStr, angleOutputNum);
    }
}