계산기의 기본 틀을 익힌 이후로 나만의 정해진 규칙이 생겼다.
"연산"에 집중 할 수 있는 나만의 틀로 활용
객체 지향형 계산기를 외운 토대로, 내가 정한 규칙에 따라 알고리즘 연습 문제를 풀이해보고자 한다.
이 두과정으로 종료된다. 변경되는 것은 결국 변수, 연산식이 얼마나 복잡하거나 생각해야 하는 것이지. 기본적으로 프로그램이 돌아가는 구조는 위처럼 고정하여 작업하고 있다. 이 방식의 틀이 외어져서 문제를 보면 일단 기본 구조부터 잡고 연산에 대해서 생각하는 것이 오히려 로직에만 집중 할 수 있어서 빠르게 문제를 해결 할 수 있는 장점이 있었다.
1. 문제 파악 과정
- 필요 데이터 파악
+--- 데이터 타입 확인
- 필요 메서드 파악
+--- 기본 입력부 input(){}
+-- 입력 값 갯수 확인
+-- 데이터 제한조건 파악(유효성검사 while loop)
+--- 기본 계산부 calculate(){}
+-- 필요 연산 확인
+-- 필요 조건 확인
+--- 기본 출력부 output(){}
+-- 출력할 데이터, 내용 확인
+--- 각 메서드 별 파라미터 전달 필요 부분 확인
2. 코드 작성 과정
- Main.java 실행부 생성 , Solution.java 클래스(설계도) 생성
- 클래스 member 구현
+--- 필요 데이터 정리에 따라 변수 선언
+--- 기본 생성자 선언
+--- 필요 메서드 정리에 따른 메서드 선언
+-- input(){}과 관련된 메서드부터 작성, 유효성 체크(진입부 메서드)
+-- calculate(){}의 실제 연산 로직 작성
+-- output(){}의 출력 관련 정리
- 실행부 Main.java에서 객체 인스턴스 생성 및 객체로부터 진입부 메서드 호출
1. Main.java
package Algorithm02;
public class Main {
public static void main(String[] args) {
System.out.println(
"[문제]머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다.\n" +
"나이 age가 주어질 때,\n" +
"2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요.\n" +
"\n" +
"제한사항 0 < age ≤ 120\n" +
"나이는 태어난 연도에 1살이며 1년마다 1씩 증가합니다.\n");
Solution solution = new Solution();
solution.inputAge();
}
}
Plain Text
복사
2. Solution.java
package Algorithm02;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.Scanner;
public class Solution {
int age;//입력 나이 //0<age<=120 //0=0+1=1살int birthYear;//출생 년도int currentYear;//현재 년도int result;//계산결과 = ????년생
Scanner sc = new Scanner(System.in);
public Solution() {
//기본 생성자
}
//필요한 함수//inputAge(){}; 나이 입력//유효성검사 나이입력 범위 0<age<=120만 허용//calculate(){}; 나이 계산 = currentYear - (age -1) = birthYear //ex) 2023-(36-1) =//outputBirthYear(){} 계산 결과 알려주기void inputAge() {
while (true) {
int age;
System.out.println("출생년도를 알고싶은 사람의 나이를 입력하세요");
age = sc.nextInt();
if (age < 0 || age >= 120) {
System.out.println("나이는 1~120까지만 입력 할 수 있습니다.");
continue;
}else {
calculate(age);
outputBirthYear(result);
break;
}
}
}
void calculate(int age) {
LocalDate now = LocalDate.now();
int currentYear = now.getYear();
result = currentYear - (age-1);
}
void outputBirthYear(int result) {
System.out.println("당신은 "+result+"년생입니다.");
}
}
Plain Text
복사