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); } }
