wisePocket

[Algorithm] 두 개의 정수가 일치하는지 여부를 알려주는 계산기 만들기 본문

Java & Algorithm/Algorithm Practice

[Algorithm] 두 개의 정수가 일치하는지 여부를 알려주는 계산기 만들기

ohnyong 2023. 8. 1. 22:57

두 개의 정수를 입력 받고 두 수가 일치하는지 여부를 알려주는 계산기

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

핵심이 되었던 연습 과정은 아래 두개 과정이다.
물론 이 구조가 이제 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 Algorithm03;

public class Main {
    public static void main(String[] args) {
        System.out.println("정수 num1과 num2가 매개변수로 주어집니다.\n" +
                "두 수가 같으면 1 다르면 -1을 retrun하도록 \n" +
                "solution 함수를 완성해주세요.\n" +
                "\n" +
                "제한사항\n" +
                "0 ≤ num1 ≤ 10,000\n" +
                "0 ≤ num2 ≤ 10,000\n");
        Solution solution = new Solution();
        solution.inputNum();
    }
}

 

2. Solution.java


package Algorithm03;

import java.util.Scanner;

public class Solution {


    int num1;
    int num2;
    int result;
    Scanner sc = new Scanner(System.in);

    public Solution() {

    }
    //    필요 데이터 파악
    //    두개의 정수 num1, num2
    //    제약 조건
    //    0<=num1<=10000
    //    0<=num2<=10000

    //    정수는 파라미터가 될 것입니다.
    //inputNum(){}
    //스캐너 필요
    void inputNum() {
        while (true) {
            int num1;
            System.out.println("Num1을 입력해 주세요.");
            num1 = sc.nextInt();
            if (0 >= num1 || num1 >= 10000) {
                System.out.println("값을 0<=num1<=10000 범위로 넣어주세요.");
                continue;
            }
            this.num1 = num1;
            break;
        }

        while (true) {
            int num2;
            System.out.println("Num2를 입력해 주세요.");
            num2 = sc.nextInt();
            if (0 >= num2 || num2 >= 10000) {
                System.out.println("값을 0<=num2<=10000 범위로 넣어주세요.");
                continue;
            }
            this.num2 = num2;
            break;
        }
        receive(num1, num2);
    }

    //    받는 메서드 receive(int num1, num2){}
    //조건문으로 아래 컨트롤if(){}else if
    //    비교 연산 같으면(==) 1이란 숫자 return,
    //    비교 연산 다르면(!=) -1이란 숫자 return
    void receive(int num1, int num2) {
        if (num1 == num2) {
            result = 1;
            outputResult(result);
        } else if (num1 != num2) {
            result = -1;
            outputResult(result);
        } else {
            System.out.println("잘못된 접근입니다.");
        }
    }

    //outputResult(){}
    void outputResult(int result) {
        if (result == 1) {
            System.out.printf("두 숫자는 같으며 결과는 %d 입니다", result);
        } else if (result == -1) {
            System.out.printf("두 숫자는 다르며 결과는 %d 입니다", result);
        }
    }
}